linux 学习笔记-040-Apache 和 PHP 结合,Apache 设置默认虚拟主机

发布于 2018-03-01  427 次阅读


Apache 和 PHP 结合

配置 apache 的配置文件 httpd.conf,使 apahe 和 php 能互相结合使用,需要修改以下几处,并做一些相关操作

[root@am-01:~#] vim /usr/local/apache2.4/conf/httpd.conf

LoadModule php5_module        modules/libphp5.so

#LoadModule php7_module        modules/libphp7.so


#先把 php7 注释掉
[root@am-01:~#] /usr/local/apache2.4/bin/apachectl restart

AH00557: httpd: apr_sockaddr_info_get() failed for am-01

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message

[root@am-01:~#] vim /usr/local/apache2.4/conf/httpd.conf

ServerName www.example.com:80

[root@am-01:~#] /usr/local/apache2.4/bin/apachectl restart

[root@am-01:~#] ps -aux | grep httpd

root      60820  0.0  1.2 257764 12376 ?        Ss   2 月 28   0:07 /usr/local/apache2.4/bin/httpd

daemon    69149  0.2  0.8 544592  8996 ?        Sl   18:44   0:00 /usr/local/apache2.4/bin/httpd

daemon    69151  0.0  0.8 544592  8996 ?        Sl   18:44   0:00 /usr/local/apache2.4/bin/httpd

daemon    69155  0.2  0.8 544592  8992 ?        Sl   18:44   0:00 /usr/local/apache2.4/bin/httpd

root      69236  0.0  0.0 112676   976 pts/0    S+   18:45   0:00 grep --color=auto httpd


#把 ServerName 的“#”号删除,就不会出现跟 ServerName 有关的提示了

使用客户端浏览器访问 linux 虚拟机的 IP 地址,假如并不能访问,那就证明需要在 linux 虚拟机中开启 http 的 80 端口,如下:

[root@am-01:~#] iptables -I INPUT -p tcp --dport 80 -j ACCEPT

linux 学习笔记-040-Apache 和 PHP 结合,Apache 设置默认虚拟主机

刷新页面可以访问

linux 学习笔记-040-Apache 和 PHP 结合,Apache 设置默认虚拟主机

[root@am-01:~#] vim /usr/local/apache2.4/conf/httpd.conf

  <Directory />

      AllowOverride none

      Require all granted

  </Directory>


#将 apache 的配置文件中的”Require all denied“改为”Require all granted“,为了防止打开虚拟主机配置文件的时候会报“403”错误
[root@am-01:~#] vim /usr/local/apache2.4/conf/httpd.conf

  AddType application/x-compress .Z

  AddType application/x-gzip .gz .tgz

  AddType application/x-httpd-php .php


#新增一行“AddType application/x-httpd-php .php”,以便能解析 php
[root@am-01:~#] vim /usr/local/apache2.4/conf/httpd.conf

  <IfModule dir_module>

      DirectoryIndex index.html index.php

  </IfModule>


#在原有的基础上增加“index.php”,设置能识别 index.php 做默认首页,也叫索引页
[root@am-01:~#] /usr/local/apache2.4/bin/apachectl -t

Syntax OK


#检查配置文件是否设置正确的命令
[root@am-01:~#] /usr/local/apache2.4/bin/apachectl graceful


#修改了配置文件后,需要用这句命令重新加载配置文件或者重启 httpd

做完以上操作后,测试是否设置完成:

[root@am-01:~#] cd /usr/local/apache2.4/htdocs/

[root@am-01:/usr/local/apache2.4/htdocs#] vim 1.php

  <?php

  phpinfo();

  ?>


#”htdocs“是默认的网站根目录,新建 1.php 文件,写入以上内容,”phpinfo“这一个函数可以查看 php 的信息,增加一个文件不需要重启 httpd

之后到客户端浏览器测试,可以见到已经设置完成,出现这个页面说明已经能正常解析 php 了

linux 学习笔记-040-Apache 和 PHP 结合,Apache 设置默认虚拟主机

假如把 httpd 配置文件中的“AddType application/x-httpd-php .php”删除或注释掉,使其不能解析 php,再次访问页面的时候将会显示源代码的信息

[root@am-01:/usr/local/apache2.4/htdocs#] vim /usr/local/apache2.4/conf/httpd.conf

  #AddType application/x-httpd-php .php

[root@am-01:/usr/local/apache2.4/htdocs#] /usr/local/apache2.4/bin/apachectl -t

Syntax OK

[root@am-01:/usr/local/apache2.4/htdocs#] /usr/local/apache2.4/bin/apachectl graceful

linux 学习笔记-040-Apache 和 PHP 结合,Apache 设置默认虚拟主机

注意点:

当使用 LAMP 时遇到无法解析 php,需检查以下几项

[root@am-01:/usr/local/apache2.4/htdocs#] /usr/local/apache2.4/bin/apachectl -M

Loaded Modules:

 core_module (static)

 so_module (static)

 http_module (static)

 mpm_event_module (static)

 authn_file_module (shared)

 authn_core_module (shared)

 authz_host_module (shared)

 authz_groupfile_module (shared)

 authz_user_module (shared)

 authz_core_module (shared)

 access_compat_module (shared)

 auth_basic_module (shared)

 reqtimeout_module (shared)

 filter_module (shared)

 mime_module (shared)

 log_config_module (shared)

 env_module (shared)

 headers_module (shared)

 setenvif_module (shared)

 version_module (shared)

 unixd_module (shared)

 status_module (shared)

 autoindex_module (shared)

 dir_module (shared)

 alias_module (shared)

 php5_module (shared)


#看有没有加载 php 的模块

如果没加载,检查有没有 php 的.so 的配置文件

[root@am-01:/usr/local/apache2.4/htdocs#] ls /usr/local/apache2.4/modules/libphp5.so

/usr/local/apache2.4/modules/libphp5.so

如果有 php 的.so 的配置文件,检查 httpd 配置文件有没有启用 php 的模块

[root@am-01:/usr/local/apache2.4/htdocs#] vim /usr/local/apache2.4/conf/httpd.conf

  LoadModule php5_module        modules/libphp5.so

检查 httpd 配置文件有没有添加“AddType application/x-httpd-php .php”

[root@am-01:/usr/local/apache2.4/htdocs#] vim /usr/local/apache2.4/conf/httpd.conf

  AddType application/x-httpd-php .php

小技巧:

ctrl+r:可以以关键字查找以前输入的命令

Apache 设置默认虚拟主机

一台服务器可以访问多个网站,每个网站都是一个虚拟主机

概念:域名(主机名)、DNS、解析域名、hosts

任何一个域名解析到这台机器,都可以访问的虚拟主机就是默认虚拟主机

hosts:可以在里面定义 IP 和域名的对应关系

httpd 配置文件中的 DocumentRoot "/usr/local/apache2.4/htdocs"字句定义了 apache 的默认站点根目录

为了做实验方便,修改客户端 hosts 文件

linux 学习笔记-040-Apache 和 PHP 结合,Apache 设置默认虚拟主机

linux 学习笔记-040-Apache 和 PHP 结合,Apache 设置默认虚拟主机

[root@am-01:/usr/local/apache2.4/htdocs#] vim /usr/local/apache2.4/conf/httpd.conf

  Include conf/extra/httpd-vhosts.conf


#把 httpd 配置文件中的这个选项启用,以便能支持虚拟主机配置文件,这时将不使用默认虚拟主机配置文件
[root@am-01:/usr/local/apache2.4/htdocs#] vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

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


#虚拟主机配置文件可以支持多个 ServerName,每一对 VirtualHost 括起来的都代表着一个主机,一个主机代表着一个网站

#ServerAdmin 用来定义管理员邮箱,可以删掉;DocumentRoot 定义网站的根目录;ServerName 和 ServerAlias 定义网站的主机名和别名,主机名只能有一个,别名可以有多个;ErrorLog 和 CustomLog 分别定义这个网站的错误日志和访问日志

#做完虚拟主机配置文件的修改后,之前 httpd 的主配置文件所定义的 ServerName 相关的设置将失效

#为了做实验,这里把 111.com 的别名改为 httpd 的主配置文件所定义的 ServerName
[root@am-01:/usr/local/apache2.4/htdocs#] mkdir /data/wwwroot

[root@am-01:/usr/local/apache2.4/htdocs#] mkdir /data/wwwroot/abc.com

[root@am-01:/usr/local/apache2.4/htdocs#] mkdir /data/wwwroot/111.com

[root@am-01:/usr/local/apache2.4/htdocs#] vim /data/wwwroot/abc.com/index.php

  <?php

  echo "abc.com";

  ?>

[root@am-01:/usr/local/apache2.4/htdocs#] vim /data/wwwroot/111.com/index.php

  <?php

  echo "111.com";

  ?>

[root@am-01:/usr/local/apache2.4/htdocs#] /usr/local/apache2.4/bin/apachectl -t

Syntax OK

[root@am-01:/usr/local/apache2.4/htdocs#] /usr/local/apache2.4/bin/apachectl graceful


#在 abc.com 和 111.com 文件夹分别建一个页面,测试配置文件正确性,重载配置文件

结合 curl 命令做测试:

-x:可以指定在哪个 IP 上的哪个端口访问哪个域名

[root@am-01:/usr/local/apache2.4/htdocs#] curl -x172.17.1.240:80 www.abc.com

abc.com

[root@am-01:/usr/local/apache2.4/htdocs#] curl -x172.17.1.240:80 www.abcd.com

abc.com

[root@am-01:/usr/local/apache2.4/htdocs#] curl -x172.17.1.240:80 www.123.com

abc.com

[root@am-01:/usr/local/apache2.4/htdocs#] curl -x172.17.1.240:80 www.111.com

abc.com

[root@am-01:/usr/local/apache2.4/htdocs#] curl -x172.17.1.240:80 www.example.com

111.com


#因为 abc.com 为默认虚拟主机,无论什么域名,只要解析到这台机器的 IP,都会访问这个网站,即是只要在虚拟主机配置文件中没查询到的域名,都会访问到 abc.com

#因为 111.com 没有设置 www.111.com 这个别名,所以访问 www.111.com 也是会访问 abc.com

#因为 111.com 设置了别名为 www.example.com,所以访问 www.example.com 实际上是访问 111.com