一、Apache和PHP结合(配置httpd支持PHP)
httpd主配置文件:/usr/local/apache2.4/conf/httpd.conf
# vim /usr/local/apache2.4/conf/httpd.conf 修改4个地方
(一)ServerName
ServerName www.example.com:80 将这行首的#去掉,打开这个功能。
LoadModule php5_module modules/libphp5.so
#LoadModule php7_module modules/libphp7.so PHP7注释掉,只能用一个PHP5。
注释掉ServerName后
# /usr/local/apache2.4/bin/apachectl start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::4baf:6071:c82a:762a. Set the 'ServerName' directive globally to suppress this message
start时这一段就不会再显示了。
启动后,ps aux |grep httpd确认进程ok。
(二) Require all denied
这行如果不改那浏览器就访问不了你的服务器
遇到这种情况,排查方法:
1.先检查IP是否通畅
2.检查IP的80端口,telnet命令
telnet 192.168.93.130 80
如果telnet没打开就用不了这个命令,打开步骤:
1)进控制面板
2)进程序,启动或关闭Windows功能
3)找到Telnet客户端,勾上
再检查80端口,此时这里是不通的,因为Linux服务器上的80端口没打开。此时需要在iptables里加一条,先临时加一条开启80的规则。
# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
80端口通了以后,再检查显示的是空白,代表通畅。
Ctrl+]退出,再输入quit退出来,也可以直接关掉这个命令提示符窗口再打开。
默认是没有禁止所有端口的,这条规则加不加都可以telnet通,也可以访问服务器IP。
再访问服务器就可以成功了,显示It works。
文件内Require all denied改为Require all granted
AllowOverride none
Require all granted
服务器能访问是因为:有这两行指定了Directory,后面的是granted。
DocumentRoot "/usr/local/apache2.4/htdocs"
Require all granted 这里如果改为了denied,服务器就不允许访问了,显示403错误,Forbidden。正常状态码是200.
先检查配置文件的语法是否正确:/usr/local/apache2.4/bin/apachectl -t
如果有错误会显示出来。
正确显示Syntax OK。
再重新加载配置文件,不会重启服务:
# /usr/local/apache2.4/bin/apachectl graceful
(三)AddType application/x-httpd-php .php
先找到这两行,在下面再增加一行php的。
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php
不加这行,你的php就没法解析。
(四)DirectoryIndex index.php
增加索引页:
DirectoryIndex index.htm index.php
再重新加载# /usr/local/apache2.4/bin/apachectl graceful
验证Apache是否支持PHP解析:
# vi /usr/local/apache2.4/htdocs/1.php 写一个PHP脚本测试
phpinfo();
?>
然后再浏览器访问192.168.93.130/1.php,能出现图形的界面就表示你的PHP支持解析。
DirectoryIndex index.php,如果没加这个索引,访问出来的就是源代码。
如果PHP解析不了,检查方法:
1)检查PHP5模块有没有加载:/usr/local/apache2.4/bin/apachectl -M
2)检查有没有libphp5.so这个文件
/usr/local/apache2.4/modules/libphp5.so
3)检查主配置文件里有没有加载libphp5.so和AddType这两行配置。
/usr/local/apache2.4/conf/httpd.conf
LoadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php
4)索引页:DirectoryIndex index.php
把PHP5改PHP7,在配置文件里把php5.so加#注释,再把php7去掉#,再保存重新加载,访问出来的就是PHP7.1.6了。
快捷键:Ctrl+r,按了以后输入命令历史里你输入过的命令,就可以搜出来。
(reverse-i-search)`grace': /usr/local/apache2.4/bin/apachectl graceful
这个图形加载出来的和# /usr/local/php7/bin/php -i |less出来的基本一致,只是显示方式不同,一个文本,一个图形,实际就是一个东西。
二、Apache默认虚拟主机
一台服务器可以访问多个网站,每个网站都是一个虚拟主机。
概念:域名(主机名)、DNS、解析域名、hosts。
任何有一个域名解析到这台机器,都可以访问的虚拟主机就是默认虚拟主机。
之所以能访问到1.php,是因为主配置文件里的这两行指定了它的根目录。
DocumentRoot "/usr/local/apache2.4/htdocs"
域名就是ServerName www.example.com:80
DNS还没生效的情况下,就在Windows的hosts修改,临时将域名指向服务器IP。
Windows下写hosts:
路径:c/windows/system32/dirvers/etc/hosts
可以指定IP和域名,格式:IP 域名。
192.168.93.130 www.abc.com
Apache的默认虚拟主机:ServerName www.example.com:80(任何域名访问这个IP都会访问到这个站点)
虚拟主机配置文件:文件内搜索extra,找到这两行,把下面httpd的那行行首的#去掉,代表启用这个配置文件。
# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
虚拟主机配置文件:/usr/local/apache2.4/conf/extra/httpd-vhosts.conf
ServerAdmin [email protected]定义管理员的邮箱,可以不要。
DocumentRoot "/usr/local/apache2.4/docs/dummy-host.example.com"定义网站的根目录
ServerName dummy-host.example.com定义域名,只能写一个
ServerAlias www.dummy-host.example.com定义别名,可写多个
ErrorLog "logs/dummy-host.example.com-error_log"定义错误日志
CustomLog "logs/dummy-host.example.com-access_log" common定义访问日志
定义完就是定义完一个网站了。
常识:一旦虚拟主机配置文件生效了,那默认虚拟主机配置文件里的ServerName www.example.com就会失效了。
示例:
DocumentRoot "/data/wwwroot/abc.com"
ServerName abc.com
ServerAlias www.abc.com www.123.com
ErrorLog "logs/abc.com-error_log"
CustomLog "logs/abc.com-access_log" common
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.example.com
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
设置完以后创建对应的目录。
# mkdir /data/wwwroot/
# mkdir /data/wwwroot/abc.com
# mkdir /data/wwwroot/111.com
# vim /data/wwwroot/abc.com/index.php
echo "abc.com";
?> 可以简写不要这行
# vim /data/wwwroot/111.com/index.php
echo "111.com";
# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
# /usr/local/apache2.4/bin/apachectl graceful
测试虚拟主机
curl命令
# curl -x 192.168.93.130:80 www.abc.com
# ping www.abc.com 如果不指定hosts就会ping到外网。
PING abc.com (199.181.132.250) 56(84) bytes of data.
64 bytes from 199.181.132.250 (199.181.132.250): icmp_seq=2 ttl=128 time=235 ms
要想在本机访问abc.com,可以改/etc/hosts文件,也可curl -x选项。
# curl -x 192.168.93.130:80 abcde.com
abc.com[root@MRX ~]# curl -x 192.168.93.130:80 www.example.com
111.com[root@MRX ~]#
无论什么域名只要解析到这个IP上就会访问到abc.com这个网站的对应的虚拟主机配置上,这个就是默认虚拟主机。
111.com这个只能叫虚拟主机,不能叫默认虚拟主机。