Apache和PHP结合
- 当使用
/usr/local/apache/bin/apachectl restart
重启Apache时 ,会出现
[root@localhost ~]# /usr/local/apache/bin/apachectl restart
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
httpd not running, trying to start
这样的提示,这不是报错,而是一个警告信息,提示没有设置servername
vim /usr/local/apache/conf/httpd.conf
文件,搜索ServerName ,将这行行首的“#”去掉。
ServerAdmin you@example.com
#
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
#ServerName www.example.com:80 删掉该行行首的“#”
- 在修改了httpd.conf之后可以使用
/usr/local/apache/bin/apachectl -t
来检测配置文件的语法是否有错。
[root@localhost ~]# /usr/local/apache/bin/apachectl -t
Syntax OK
- 重新加载一下Apache的配置文件
/usr/local/apache/bin/apachectl graceful
,再重启Apache就不会显示上面的警告了。 - 在修改完配置文件,重启Apache服务时,如果出现报错,有可能是因为我们同时启用了PHP5和PHP7,在配置文件中注释掉一行就行了。
- 在配置文件httpd.conf中,将Require all denied 改为Require all granted 否则在浏览器访问时会提示403
- 检查80端口是否开启,可以在Windows运行telnet 192.168.254.131 80 发现端口没开
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
配置防火墙,将80端口打开,再使用浏览器访问该ip,成功访问。
让Apache支持PHP解析
- 在httpd.conf中搜索AddType,然后增加一行
AddType application/x-httpd-php .php
才能解析PHP - 增加索引页,在httpd.conf中搜索Index ,在index.html后面加上index.php
- 检测语法是否有错。
/usr/local/apache/bin/apachectl -t
- 重新加载配置文件
/usr/local/apache/bin/apachectl graceful
- 编辑一个页面,网页默认路径为/usr/local/apache/htdocs。
vim /usr/local/apache/htdocs/index.php
- 使用浏览器访问 192.168.254.131/index.php,成功访问,该页面表示Apache解析PHP成功。如果不能成功解析PHP的话,访问该页面只会显示源代码。
排错思路 Apache不能解析PHP排错思路
- 检查Apache配置文件httpd.conf ,有没有加载PHP模块
/usr/local/apache/bin/apachectl -M
- 若未加载PHP模块,则需要看看modules目录下是否有PHP模块文件
ls /usr/local/apache/modules/libphp
- 若有模块文件,再去httpd.conf中 检查是否有
LoadModule php5_module modules/libphp5.so
这一行配置 - 然后在查看是否在配置文件 中添加过
AddType application/x-httpd-php .php
这行内容。
默认虚拟主机
Apache 默认存放网页根目录DocumentRoot "/usr/local/apache/htdocs",意思就是在默认情况下一台服务器只能跑一个网站,但是实际情况是一台服务器上面可以跑多个站点,一个站点就是一个虚拟主机。
如何让一台机器跑多个站点?
- 修改httpd.conf 搜索extra,找到virtual hosts 将下面一行
#Include conf/extra/httpd-vhosts.conf
的#删掉,保存退出。 - vim /usr/local/apache/conf/extra/httpd-vhosts.conf 编辑虚拟主机配置文件
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/usr/local/apache/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>
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host2.example.com
DocumentRoot "/usr/local/apache/docs/dummy-host2.example.com"
ServerName dummy-host2.example.com
ErrorLog "logs/dummy-host2.example.com-error_log"
- 两段<VirtualHost *:80>开头的代码代表两个主机
- 编辑 ServerAdmin webmaster@dummy-host.example.com 这一行没意义,可以删掉
- DocumentRoot "/tmp/abc.com" 这一行指定网页的根目录
- ServerName abc.com指定域名
- ServerAlias www.abc.com www.2323.com 指定域名别名,可以指定多个
- ErrorLog "abc.com_log" 指定错误日志名
- CustomLog "abc.com" common 指定访问日志名
<VirtualHost *:80>
DocumentRoot "/tmp/abc.com"
ServerName abc.com
ServerAlias www.abc.com www.2323.com
ErrorLog "abc.com_log"
CustomLog "abc.com_log" common
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/tmp/ccc.com"
ServerName ccc.com
ServerAlias www.ccc.com
ErrorLog "ccc.com_log"
CustomLog "ccc.com_log" common
</VirtualHost>
- 要测试需要根据DocumentRoot "/tmp/abc.com"chuan创建相应的目录,编辑相应的网页
- 改一下Windows的hosts文件,使用浏览器访问