11.14/11.15 Apache和PHP结合
11.16/11.17 Apache默认虚拟主机
11.14/11.15 配置Apache支持PHP
先打开Apache服务1
2[root@localhost ~]# /usr/local/apache2.4/bin/apachectl start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
这行信息是行警告 不是错误 他说我们并没配置ServerName 因此我要去配置文件把ServerName改下
1.修改ServerName
打开Apache的配置文件/usr/local/apache2.4/conf/httpd.conf
1
2[root@localhost ~]# vim /usr/local/apache2.4/conf/httpd.conf
ServerName www.example.com:80
找到ServerName那行把#去掉就可以了
我们测试用win上的浏览器去访问192.168.80.101(虚拟机的ip) 但发现不成功
- 思路:
- 1.看看192.168.80.101是否通
- 2.看看192.168.80.101的80端口是否能通
使用win的Telnet远程连接服务控制面板
—程序与功能
—打开或者关闭windows功能
—-Telnet客户端
(这里只下客户端即可 下服务器端的会打开23端口 有风险)
- 1.看看192.168.80.101是否通
发现192.168.80.101的80端口不通
因此我们回去虚拟机上设置iptable规则把所有通过80的数据都允许1
[root@localhost ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
再回去win用telnet 192.168.80.101 80看看 现在通了
使用Ctrl+] 退出再quit
现在打开浏览器看看 显示It works!
2.修改Require all denied
这里改为granted为了让虚拟主机显示200状态码1
2
3
4<Directory />
AllowOverride none
Require all granted
</Directory>
每当配置文件改完都要检查配置文件是否正确1
2[root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
加载配置文件1
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful
3.添加 Addtype application/x-httpd-php .php
这行为了让HTTP支持和解析php
4.添加索引页 index.php
索引页也叫默认页 当你在浏览器中不输人主页就会自动调整到此页
记得每次更改配置文件后都要 apachectl -t
和apachectl graceful
为了查看是否解析php 我们在htdocs目录下新建个test.php1
2
3
4[root@localhost ~]# vim /usr/local/apache2.4/htdocs/test.php
<?php
phpinfo();
?>
phpinfo()
是php的参数可以打印出php的配置
再回去浏览器看192.168.80.101/test.php
那么假如php解析不成功就会显示源代码 我们可以先看看
1.modules目录是否有有libphp5.so的库文件
1 | [root@localhost ~]# /usr/local/apache2.4/modules/libphp |
2.配置文件是否支持libphp5.so库文件
1 | LoadModule php5_module modules/libphp5.so |
3.配置文件是否添加支持解析php文件的参数
1 | Addtype application/x-httpd-php .php |
11.16/11.17 Apache默认虚拟主机
域名(主机名)
:由于ip地址很难记住 使用域名来来登录服务器虚拟主机
:在一台服务器上运行多个站点 每个站点对应一个独立的域名 而每个站点就叫一个虚拟主机DNS
:域名解析 把域名和IP绑定在一起 相当于是一本世界版的电话簿 Linux上的/etc/hosts
是临时的域名解析 相当于是自家的电话簿 windows上也有hosts 路径是 C:\Windows\System32\drivers\etc\HOSTS
默认虚拟主机
:当域名访问到服务器 但服务器没有找到相应的虚拟主机时就会自动跳转到默认虚拟主机
为了让 www.example.com
可以在windows浏览器解析到 192.168.80.101,到windows下的hosts下做域名解析
现在浏览器上用 www.example.com
可以访问到192.168.80.101了
在Linux机器上使用curl命令来测试 curl -x
等于用/etc/hosts
来作临时域名解析1
2[root@localhost ~]# curl -x 192.168.80.101:80 www.example.com
<html><body><h1>It works!</h1></body></html>
由于http.conf里面的只能配置一个站点 不能满足生产环境的要求 因此我们要使用虚拟主机的配置文件来管理多个站点
在/usr/local/apache2.4/conf/httpd.conf
中找到Virtual hosts并去掉#
来生效虚拟主机配置 这样做httpd.conf里面的ServerName DocumentRoot都会失效1
2# Virtual hosts
Include conf/extra/httpd-vhosts.conf
配置虚拟主机配置文件 路径是 /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
1
[root@localhost ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
每一对<VritualHost>
就是一个虚拟主机 排在第一个的是默认虚拟主机ServerAdmin
邮箱地址 可以忽略DocumentRoot
站点地址 必须有ServerName
网站名字就是域名 必须有ServerAlias
网站别名ErrorLong
错误日志路径CustomLog
访问日志路径和格式
1 | <VirtualHost *:80> |
这里我们配置两个虚拟主机一个test1.com 用www.test1.com
www.example.com
也是访问他的主页 目录在/var/www/test1.com
另一个是test2.com 用www.test2.com
www.123.com
www.abc.com
访问他的主页 目录在/var/www/test2.com
各自创建目录和主页1
2
3[root@localhost ~]# mkdir -p /var/www/test1.com/ /var/www/test2.com/
[root@localhost ~]# vim /var/www/test1.com/index.php
[root@localhost ~]# vim /var/www/test2.com/index.php
检查配置和加载配置1
2
3[root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful
测试
在windows机器上用浏览器 先绑定hosts
然后逐个访问
在Linux机器上使用curl命令测试1
2
3
4
5
6
7
8
9
10[root@localhost ~]# curl -x192.168.80.101:80 test1.com ##-x 相当于/etc/hosts 把ip和域名解析到一起
test1[root@localhost ~]# curl -x192.168.80.101:80 test2.com
test2[root@localhost ~]# curl -x192.168.80.101:80 test1.com
test1[root@localhost ~]# curl -x192.168.80.101:80 test2.com
test2[root@localhost ~]# curl -x192.168.80.101:80 www.test1.com
test1[root@localhost ~]# curl -x192.168.80.101:80 www.exaample.com
test1[root@localhost ~]# curl -x192.168.80.101:80 www.nihao.com
test1[root@localhost ~]# curl -x192.168.80.101:80 www.123.com
test2[root@localhost ~]# curl -x192.168.80.101:80 www.abc.com
test2[root@localhost ~]# curl -x192.168.80.101:80 www.test2.com