一、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

<Directory />

   AllowOverride none

   Require all granted

服务器能访问是因为:有这两行指定了Directory,后面的是granted。

DocumentRoot "/usr/local/apache2.4/htdocs"

<Directory "/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

增加索引页:

<IfModule dir_module>

   DirectoryIndex index.htm index.php

再重新加载# /usr/local/apache2.4/bin/apachectl graceful


验证Apache是否支持PHP解析:

# vi /usr/local/apache2.4/htdocs/1.php  写一个PHP脚本测试

<?php

phpinfo();

?>

然后再浏览器访问192.168.93.130/1.php,能出现图形的界面就表示你的PHP支持解析。

四十、Apache和PHP结合、Apache默认虚拟主机_结合四十、Apache和PHP结合、Apache默认虚拟主机_Apache_02

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"

<Directory "/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

<VirtualHost *:80>    每一段这个都代表一台主机

   ServerAdmin webmaster@dummy-host.example.com定义管理员的邮箱,可以不要。

   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定义访问日志

</VirtualHost>

定义完就是定义完一个网站了。

常识:一旦虚拟主机配置文件生效了,那默认虚拟主机配置文件里的ServerName www.example.com就会失效了。

示例:

<VirtualHost *:80>

   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

</VirtualHost>


<VirtualHost *:80>

   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

</VirtualHost>

设置完以后创建对应的目录。

# mkdir /data/wwwroot/

# mkdir /data/wwwroot/abc.com

# mkdir /data/wwwroot/111.com

# vim /data/wwwroot/abc.com/index.php

<?php

echo "abc.com";

?>        可以简写不要这行

# vim /data/wwwroot/111.com/index.php

<?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这个只能叫虚拟主机,不能叫默认虚拟主机。