标签:apache php apache虚拟主机
apache和php结合虽然我们现在已经安装好了apache,mysql,php。但是我们还没有让他们结合起来,虽然apache调用了php作为它的一个模块,但我们还不知道他是否能解析php。这时我们还需要去编辑一下httpd的配置文件。
它的配置文件是/usr/local/apache的全名名字/conf/httpd.conf
[root@linletao-001 ~]# vim /usr/local/apache2.4/conf/httpd.conf
在这里我们需要编辑几个地方
1.ServerName
在我们重启httpd的时候经常会遇到一下提示
[root@linletao-001 ~]# /usr/local/apache2.4/bin/apachectl restart
AH00558: httpd: Could not reliably determine the server‘s fully qualified domain name, using fe80::df71:e49:bd9a:8b3. Set the ‘ServerName‘ directive globally to suppress this message
乍一看上去是一个报错,但其实是一个警告,看着很别扭,我们想要删掉他。我们可以搜索
ServerName,然后将#ServerName www.example.com:80前面的“#”号删掉就可以。
完成后我们重启httpd,然后出现了另一个错误提示
[root@linletao-001 ~]# /usr/local/apache2.4/bin/apachectl start
/usr/local/apache2.4/bin/apachectl: 行 79: 1399 段错误 $HTTPD -k $ARGV
这是因为我们刚才在这里添加了两个php,我们只要在其中一个前面加一个“#”号注释掉就可以。
LoadModule php5_module modules/libphp5.so
#LoadModule php7_module modules/libphp7.so
然后我们重启httpd,就不会出现提示了。
2.Require all denied改成,如果不改这一行,我们是访问不到linux的ip的,他会提示我们检查服务器和防火墙,如果我们遇到这样的问题,首先应该查看我们的ip是否畅通。然后我们查看80端口是否畅通。先进入windows中的DOS模式,查看80端口是否打开,如果进入DOS后没有可以查找的命令,我们就进图windows的控制面板,进入程序,然后点击程序与功能,然后点击打开或关闭windows功能,点击telnet前面的方块,就安装上了telnet客户端,然后在DOS中输入telnet+IP地址+端口号查看,只要DOS界面无任何显示,就证明我们的80端口通了。如果不通,它则显示一直在连接。我们也可以用iptabs -nvL去查看80端口的是否打开。
[root@linletao-001 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
2614 228K ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
1 60 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- lo 0.0.0.0/0 0.0.0.0/0
1 52 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
2370 2330K REJECT all -- * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT 2143 packets, 336K bytes)
pkts bytes target prot opt in out source destination
结果是没有打开,我们可以先用一条命令去打开80端口。
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
然后去windows的浏览器去输入我们虚拟机的ip,这时候就可以连通了。
有时候我们的浏览器连通了,却显示403,这是因为在我们的配置文件中有一个
Require all denied,我们要将denied改为granted,配置文件中有两处,都要改。
我们改完配置首先要去检查一下它的语法,比如我们要检查apache的配置文件语法,就可以这样输入
/usr/local/apache2.4/bin/apachectl -t //-t就是测试语法的参数
[root@linletao-001 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK(出现这个提示,则证明语法正确)
然后重新加载配置文件,在文件的结尾处加graceful,重新加载。
3.增加一行和php相关的配置
AddType application/x-httpd-php .php
首先我们搜索ADDType
然后在AddType application/x-compress .Z和AddType application/x-gzip .gz .tgz的下面加一行,AddType application/x-httpd-php .php,这样就可以解析php了。
4.增加一个索引页
先进入配置文件进行编辑,然后找到# DirectoryIndex: sets the file that Apache will serve if a directory,
然后将它替换掉以前的文件,DirectoryIndex index.html index.php
然后我们验证一下apache是否可以验证php,先写一个测试的脚本
vim /usr/local/apache2.4/htodcs/1.php
内容如下
<?php
phpinfo();
?>
然后我们再浏览器中输入我们的ip后面接/1.php,如果出现页面,则证明成功,但是如果出现了源代码,则证明我们apache的配置文件出错了。一旦出错,我们需要检查一下一个方面。
1.查看加载模块有没有加载php
/usr/local/apache2.4/bin/httpd -M
但是如果没发现有php模块,我们则要查看一下有没有libphp5.so这个文件。
2.查找libphp5.so文件
[root@linletao-001 htdocs]# ls /usr/local/apache2.4/modules/libphp5.so
/usr/local/apache2.4/modules/libphp5.so
如果有,但是没有加载,我们就要去配置文件中有没有加载它
LoadModule php5_module modules/libphp5.so
如果有加载,我们还要去看他有没有AddType application/x-httpd-php .php
3.查找AddType application/x-httpd-php .php
这里一定要注意一下,在最后的.php前一定要加一个空格,不加空格的话语法检查会报错。
检查完这几步我们就可以解析我们的php了。
我们检查修改完配置文件后一定要做一个语法检测,然后再进行graceful加载,否则网站会出错。
一台服务器可以访问多个网站,每个网站都是一个虚拟主机。
概念:域名(主机名)、DNS、解析域名、hosts
虚拟主机:任何一个域名,指向到这个ip,他都会访问到这站点,这个站点就叫默认虚拟主机。
windows下写hosts
这个文件在储存的位置在windiws/system32/drives/etc下,用记事本打开,在 For example:下先写入ip,然后后面写网站,保存退出。这样网站就会指向指定的ip。
打开apache的配置文件
vim /usr/local/apache2.4/conf/httpd.conf
查找extra,找到# Virtual hosts
然后将Include conf/extra/httpd-vhosts.conf前面的“#”去掉。
#Virtual hosts
Include conf/extra/httpd-vhosts.conf
保存退出。
然后我们打开一个二级配置文件,这个二级配置文件就是虚拟主机的配置文件。在这个配置文件中我们可以配置多个servename。他们都是以<VirtualHost :80>开始,以</VirtualHost>结束
虚拟主机配置文件:vim /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"
(定义网站的根目录)我们可以修改为 DocumentRoot "/data/wwwroot/123.com",这还是要根据我们的实际网站名需求去改。
ServerName dummy-host.example.com
(服务器名)可以改为123.com。可以根据实际情况,修改成网站名。
ServerAlias www.dummy-host.example.com
(服务器别名) www.123.com www.abc.com 可以根据实际情况,修改成网站名,而且可以写多个。
ErrorLog "logs/dummy-host.example.com-error_log"
错误日志,可根据实际情况改名。
CustomLog "logs/dummy-host.example.com-access_log" common
访问日志,可根据实际情况修改。
</VirtualHost>
一对一对出现,这就代表着一台虚拟主机。一个主机就是一个网站。
定义一个网站最核心的是DocumentRoot和 ServerName。serveralias可以写多个,但ServerName只能写一个。
修改完后我们去创建对应的目录
[root@linletao-001 ~]# mkdir /data/wwwroot/
[root@linletao-001 ~]# mkdir /data/wwwroot/123.com
[root@linletao-001 ~]# mkdir /data/wwwroot/111.com
可根据网站名具体修改
然后在对应的站点根目录下创建一个index.php
[root@linletao-001 ~]# vim /data/wwwroot/123.com/index.php
然后在vim中编辑
<?php
echo "123.com";
然后保存退出。
[root@linletao-001 ~]# vim /data/wwwroot/111.com/index.php
<?php
echo "111.com";
保存退出
然后检查语法是否有错
[root@linletao-001 ~]# /usr/local/apache2.4/bin/apachectl -t
AH00526: Syntax error on line 33 of /usr/local/apache2.4/conf/extra/httpd-vhosts.conf:
ServerName takes one argument, The hostname and port of the server
这里面出现了一个错误,是在第33行。进入查看后发现是多写了一个网站名。所以要删除一个。
修改完后,重新加载。
我们可以用curl -x来测试,如果我们直接去ping域名的话,会直接ping到外网,
[root@linletao-001 ~]# ping 123.com
PING 123.com (61.132.13.130) 56(84) bytes of data.
64 bytes from 61.132.13.130 (61.132.13.130): icmp_seq=1 ttl=116 time=44.4 ms
64 bytes from 61.132.13.130 (61.132.13.130): icmp_seq=2 ttl=116 time=44.3 ms
64 bytes from 61.132.13.130 (61.132.13.130): icmp_seq=3 ttl=116 time=44.5 ms
这时我们用curl -x
[root@linletao-001 ~]# curl -x192.168.1.106:80 www.llt.com
123.com[root@linletao-001 ~]# curl -x192.168.1.106:80 www.789.com
123.com[root@linletao-001 ~]# curl -x192.168.1.106:80 www.123.com
123.com[root@linletao-001 ~]# curl -x192.168.1.106:80 www.1111.com
123.com[root@linletao-001 ~]# curl -x192.168.1.106:80 www.111.com
这时,我们可以看到无论什么网站,现在都会指定到123.com了。
我们输入网址,它就会搜索所有的配置段,如果配置段不存在,那么它就会自动跳转到我们的虚拟主机上。(这里的虚拟主机为123.com )
结论
1.要想虚拟主机生效,首先要在apache的配置文件中找到虚拟主机,虚拟主机名为# Virtual hosts
Include conf/extra/httpd-vhosts.conf,并将前面的“#”删除。这时虚拟主机配置文件生效了。
2.每一个虚拟主机都有多个virtualhost,每个virtualhost都有一个对应的ServerName和DocumentRoot,每一个virtualhost都有一个站点,每一个站点都代表一个虚拟主机。
3.在虚拟主机上有一个比较特殊的,叫虚拟默认主机,默认虚拟主机就是无论什么域名解析到这个ip上,它都会去访问这个默认虚拟主机。
4.12任务 apache结合php以及apache默认虚拟主机
标签:apache php apache虚拟主机
原文地址:http://blog.51cto.com/13067688/2103621