Apache和PHP结合

配置http支持PHP

  • http的主配置文件为/usr/local/apache2.4/conf/httpd.conf

这里需要修改配置文件中的4处,分别为:
ServerName
Require all denied
AddType application/x-httpd-php .php
DirectoryIndex index.html index.php

步骤 :
修改ServerName

  • 示例: 运行下面的命令时出现疑似错误的东西,其实它是个警告,那么改怎么去除呢
[root@centos001 ~]# /usr/local/apache2.4/bin/apachectl restart
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:fe34:4a63. Set the 'ServerName' directive globally to suppress this message

解决方法:编辑这个文件,然后重启就没有了
进入配置文件后搜索ServerName

#进入配置文件
[root@centos001 ~]# vim /usr/local/apache2.4/conf/httpd.conf
#搜索
/ServerName

  • 错误1:视屏中遇到的错误,取消掉注释后重启服务,还是有问题

    解决方法:出现错误的原因是加载了两个php模块 注释掉一个就可以了

修改Require all denied

为什么要修改?修改的目的是,允许所有请求,如果不设置该行,则我们访问的时候会报403错误。
修改内容在第6步

  • 示例: 打开浏览器连接我们虚拟机的ip,
    错误a

    解决方法:
    1.先用cmd连接我们的ip 测试连通性

    2.连接80端口,下图是正常的,因为我们的虚拟机没有开启80端口,所以连接失败

    错误b: cmd中使用telnet报错

    解决方法:
    原因:pc端的80端口关闭了
    打开控制面板==>>程序和功能==>>启用关闭windos功能==>>勾选Telnet客户端

    3.开启虚拟机上的80端口

# 检查80端口是否开启
[root@centos001 ~]# iptables -nvL
#开启80端口
[root@centos001 ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT 

4.用cmd重新连接虚拟机80端口,检查

5.用浏览器连接虚拟机ip

6.修改配置文件

#打开配置文件
[root@centos001 ~]# vim /usr/local/apache2.4/conf/httpd.conf
#修改为
Require all granted

命令补充 :
/usr/local/apache2.4/bin/apachectl -t //测试修改完配置文件后的语法是否规范
/usr/local/apache2.4/bin/apachectl start //启动服务
/usr/local/apache2.4/bin/apachectl graceful//重新加载配置文件,并不会重启服务

增加配置文件AddType application/x-httpd-php .php

如果不增加这行,你的PHP无法解析

#打开配置文件
vim /usr/local/apache2.4/conf/httpd.conf
#找到位置粘贴
 AddType application/x-httpd-php .php

增加DirectoryIndex index.html index.php

增加一个索引页

测试是否能正确解析PHP

测试

1.编写一个测试脚本

#创建一个叫1.php的文件
[root@centos001 ~]# vi /usr/local/apache2.4/htdocs/1.php
#写入如下信息,保存退出
<?php
phpinfo(); //这个函数 能吧php的相关信息打印出来
?>

2.打开浏览器,在虚拟机ip后面加上文件名/1.ph

排错:

当无法正确解析的时候,我们该如何排错呢?

方法:
这时候我们需要检查Apache的配置文件
1.检查php模块是否加载

[root@centos001 ~]# /usr/local/apache2.4/bin/apachectl -M

.如果没有加载怎么办? 检查一下是否有这个文件

[root@centos001 ~]# ls /usr/local/apache2.4/modules/libphp7.so 
/usr/local/apache2.4/modules/libphp7.so

.如果有这个文件但是没有加载,我们就应该到配置文件中去注释并加载出来

[root@centos001 ~]# vim /usr/local/apache2.4/conf/httpd.conf


2.检查配置文件是否有写或者写错没有

 /usr/local/apache2.4/bin/apachectl -t //测试修改完配置文件后的语法是否规范

3.有没有加index.php索引页

输入网站地址后面一般都默认自动添加这个


Apache默认虚拟主机

介绍

  • 先来介绍“虚拟主机”:早起的linux服务器上,一个服务器只能运行一个网站,依旧是说只能跑一个网站。但是随着技术的发展, 一个服务器能跑多个域名了。这里的服务器就叫做主机,早期一个主机对应一个站点。现在一个主机能跑多个站点,所以就有了虚拟主机的概念。在一台服务器上虚拟出多个主机,这样就实现了一台服务器上跑多个站点。
    服务器上能有多高虚拟机,每个虚拟机都会定义一个域名(也能是多个),只要吧这个域名解析指向这个服务器,就能访问这个站点了。
  • 什么叫解析指向?
    我们访问一个网站,需要在浏览器里面输入域名,然后就能访问到网站内容。这个过程是需要远程服务器通信的,网站内容就是从服务器上读取到的。而这个服务器是由你访问的域名来决定在哪里的,而域名之所以能决定服务器在哪里,就是因为这个域名做了解析指向。域名解析服务器ip地址,这个行为室友dns服务器决定的。 假如你访问的域名指向了你的服务器,而你又在这台服务器上做了配置标记了这个域名,这个域名就能被正常访问。
  • 什么是默认虚拟主机?任何一个域名指向这台服务,只要没有对应的虚拟主机,就会由这个默认虚拟主机来处理。任何一个域名解析到这台机器,都可以访问的虚拟主机就是默认虚拟主机

示例

为了更清除的认识一下,我们先来做个实验

  • 在windos下写hosts

windos下的hosts有什么用呢? 答:可以定义一个ip、一个域名,然后让这个域名指向到这个ip去 1.找到hosts所在目录,并用记事本打开
2.打开后 添加

3.用cmd测试一下

虚拟主机管理

1.编辑配置文件httpd.conf(这个文件是httpd服务的主配置文件)

 vim /usr/local/apache2.4/conf/httpd.conf //搜索httpd-vhost,去掉#

2.更改虚拟主机配置文件

#进入配置文件
[root@centos001 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
#更改后的配置文件内容
<VirtualHost *:80> //一段这样开头的就是一个虚拟主机
    DocumentRoot "/data/wwroot/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/wwroot/111.com"	
    ServerAlias www.example.com
    ServerName 111.com
    ErrorLog "logs/111.com-error_log"
    CustomLog "logs/111.com-access_log" common
</VirtualHost>

3.添加虚拟主机相应目录

[root@centos001 ~]# mkdir /data/wwroot/
[root@centos001 ~]# mkdir /data/wwroot/abc.com
[root@centos001 ~]# mkdir /data/wwroot/111.com

4.在相应目录创建PHP文件

[root@centos001 ~]# vim /data/wwroot/abc.com/index.php
#文件内容如下
<?php
echo "abc.com";
#另一个虚拟机的
[root@centos001 ~]# vim /data/wwroot/111.com/index.php
<?php
echo "111.com";
#检查读写
[root@centos001 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
#重启服务
[root@centos001 ~]# /usr/local/apache2.4/bin/apachectl graceful

虚拟主机测试

1.如果不在虚拟机中进行本地域名配置(hosts),在进行ping命令测试虚拟主机域名时会访问到外网

[root@centos001 ~]# ping abc.com
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=1 ttl=128 time=252 ms

2.curl -x命令
curl -x 指定访问端口

此时访问所有未定义的域名都会将访问地址指向到默认虚拟主机,因为已经自定义添加了虚拟主机,所以此时的默认虚拟主机为配置文件“httpd-vhosts.conf”中的第一个虚拟主机(在此为abc.com)

[root@centos001 ~]# curl -x192.168.10.120:80 abc.com
abc.com[root@centos001 ~]# curl -x192.168.10.120:80 abcf.com
abc.com[root@centos001 ~]# curl -x192.168.10.120:80 www.example.com
111.com[root@centos001 ~]# curl -x192.168.10.120:80 111.com

猜你喜欢

转载自my.oschina.net/u/3707523/blog/1594098