您的位置:首页 > 运维架构 > Apache

day42:虚拟主机及apache和php结合:

2018-08-24 23:42 387 查看
1、虽然apache和php安装完成,但是它们要结合到一起才可以使用:如下:

1:要修改httpd的主配置文件: /usr/local/apache2.4/conf/httpd.conf #修改完成后需要重启服务:有四处需要修改:

[root@localhost_002 ~]# vim /usr/local/apapche2.4/conf/httpd.conf
ServerName www.example.com:80            #第一处把#号去掉:

<Directory />
AllowOverride none
Require all denied     #第二处需要把denied修改为granted
#   Require all granted

</Directory>
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php        #第三处新增这一行,用于支持php的语法:

<IfModule dir_module>
DirectoryIndex index.html index.php         #第四处新增index.php索引页:
</IfModule>

2:检查配置文件需要是否正确: /usr/local/apapche2.4/bin/apache -t

[root@localhost_002 ~]# /usr/local/apapche2.4/bin/apachectl -t
Syntax OK

3:重启服务,即使配置文件有问题,也不会把进程杀掉: /usr/local/apapche2.4/apache graceful

[root@localhost_002 ~]# /usr/local/apapche2.4/bin/apachectl graceful

注释:在httpd.conf的配置文件里有两个部分需要修改granted才可以,会影响虚拟主机或者访问为403Forbidden了:

<Directory />
AllowOverride none
Require all granted            #从denied修改为granted:
</Directory>
# Note that from this point forward you must specifically allow
# particular features to be enabled - so if something's not working as
AllowOverride None
# Controls who can get stuff from this server.
Require all granted          #此处也要修改denied为granted:
</Directory>

注释:有时候重启apapche时会有以下提示,则是需要安装如下操作:

[root@localhost_002 ~]# /usr/local/apapche2.4/bin/apachectl restart
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.149.130. Set the 'ServerName' directive globally to suppress this message
[root@localhost_002 ~]# vim /usr/local/apapche2.4/conf/
extra/          httpd.conf      httpd.conf.bak  magic           mime.types      original/
[root@localhost_002 ~]# vim /usr/local/apapche2.4/conf/httpd.conf
[root@localhost_002 ~]# grep -i 'servername' /usr/local/apapche2.4/conf/httpd.conf

ServerName www.example.com:80         #需要把这一行的#号去掉才可以:

2、apahce结合php:如上,我们在httpd的配置文件里定义了index.php,让支持php的语法:

测试:需要在默认页/usr/local/apapche2.4/htdoc/目录下:写入一个1.php,内容如下:

[root@localhost_002 ~]# cd /usr/local/apapche2.4/htdocs/1.php
<?
phpinfo();
?>
</div></body></html>[root@localhost_002 htdocs]# curl -I 192.168.149.130/1.php
HTTP/1.1 200 OK

注释:它同/usr/local/php/etc/php -i显示的信息会是同一个内容的:

为什么默认页面会显示/usr/local/apache/htdocs/,因为在httpd中有定义默认根目录的位置:

[root@localhost_002 htdocs]# grep 'htdocs' /usr/local/apapche2.4/conf/httpd.conf
DocumentRoot "/usr/local/apapche2.4/htdocs"
<Directory "/usr/local/apapche2.4/htdocs">
#定义了网站的根目录的位置在/usr/local/apache2.4/htdocs:

2、默认虚拟主机:是指apache的一个服务下面跑了多个网站,其实在httpd.conf里有一个默认虚拟主机www.example.com:80,并且一个虚拟主机只能定义一个servername,此时我们通过任何一个绑定该虚拟机ip的域名进行访问都会调转到改默认主机,也会让多个域名都指向到那一个htdocs目录,不方便管理:一台服务是器可以跑多个域名,也为了方便管理,需要对虚拟主机管理:

图例:我们可以修改编辑本地的hosts的文件,并指定多个域名,然后默认访问的还是指向了www.example.com这个网站:

本地hosts所在目录: C:\Windows\System32\drivers\etc\hosts #因为解析会优先解析本地hosts文件:

#112.80.255.214		730.nuomi.n.shifen.com
#123.125.114.5		www.hao123.com
192.168.149.130       www.123.com   www.abc.com          #此为需要指向的域名:

然后在浏览器里访问时,还是会调转到www.exaple.com那个页面:

配置虚拟主机

注释:一旦虚拟主机生效了,默认主机www.example.com就失效了:

1:修改配置文件 /usr/local/apapche2.4/conf/httpd.conf #打开虚拟主机配置文件入口: conf/extra/httpd-vhost.conf

[root@localhost_002 htdocs]# vim /usr/local/apapche2.4/conf/httpd.conf
#Include conf/extra/httpd-info.conf
#Virtual hosts
Include conf/extra/httpd-vhosts.conf       #把#号去掉:打开虚拟主机配置:

2:修改二级虚拟主机配置文件: /usr/local/apapche2.4/conf/extra/httpd-vhost.conf

注释:这个文件里面可以定义多个虚拟主机,该配置下每一段"< VirtualHost *:80 >"可以是一个虚拟主机:用来跑一个网站:

[root@localhost_002 apapche2.4]# vim conf/extra/httpd-vhosts.conf

3:我们分别编辑第一个网站和第二个网站,内容如下: /usr/local/apapche2.4/conf/extra/httpd-vhost.conf

[root@localhost_002 apapche2.4]# vim conf/extra/httpd-vhosts.conf
cat conf/extra/httpd-vhosts.conf
# Virtual Hosts
#第一个网站:
<VirtualHost *:80>
ServerAdmin yuanhh@forebix.com                #管理员的邮箱:
DocumentRoot "/data/wwwroot/abc.com"        ###网站根目录:----核心文件之一:
ServerName  abc.com                           #网站域名(只能定义一个),核心文件之二:
ServerAlias www.abc.com   www.123.com         #网站别名(可以有多个):
ErrorLog "logs/abc.com-error_log"             #网站访问日记(格式在主配置文件httpd.conf中定义)
CustomLog "logs/abc.com-access_log" common    #网站错误访问日记:
</VirtualHost>
第二个网站:
<VirtualHost *:80>
ServerAdmin yuanhh@forebix.com               #管理员的邮箱:
DocumentRoot "/data/wwwroot/111.com"       ###网站根目录:----核心文件之一:
ServerName 111.com                           #网站域名(只能定义一个),核心文件之二:
ServerAlias www.example.com                  #网站别名(可以有多个):
ErrorLog "logs/111.com-error_log"            #网站访问日记(格式在主配置文件httpd.conf中定义)
CustomLog "logs/111.com-access_log" common   #网站访问日记(格式在主配置文件httpd.conf中定义)
</VirtualHost>

如上图例:此时我们定义了两个网站:网站的核心参数如下:

DocumentRoot:网站根目录:

ServerName:网站域名: ServierAlias:网站别名:

ErrorLog:访问日记: CustomLog:访问错误的日记:

4:创建相应的虚拟主机目录: /data/wwwroot/abc.com(第一个主机) /data/wwwroot/111.com(第二个主机)

[root@localhost_002 apapche2.4]# mkdir /data/wwwroot/         #创建目录
[root@localhost_002 apapche2.4]# mkdir /data/wwwroot/abc.com   #创建第一个虚拟主机目录:
[root@localhost_002 apapche2.4]# mkdir /data/wwwroot/111.com   #创建第二个虚拟主机目录:
#定义第一个主机的网站内容:
[root@localhost_002 apapche2.4]# cd /data/wwwroot/abc.com/     #进入第一个虚拟主机目录,待写入相关配置:
[root@localhost_002 abc.com]# vim index.php                    #写入第一个虚拟主机的测试脚本:
<?php
echo "abc.com";

#顶一个第二个主机的网站内容:
[root@localhost_002 wwwroot]# cd /data/wwwroot/111.com/        #进入第一个虚拟主机目录,待写入相关配置:
[root@localhost_002 111.com]# vim index.php                    #写入第一个虚拟主机的测试脚本:
<?php
echo "abc.com";

[root@localhost_002 111.com]# /usr/local/apapche2.4/bin/apachectl -t     #检查是否有错误:
Syntax OK
[root@localhost_002 111.com]# /usr/local/apapche2.4/bin/apachectl graceful   #重启服务:

5:网站创建完成,此时需要在本地/etc/hosts,或者用curl命令来测试:

curl -x192.168.149.130:80 www.abc.om #以本机的80端口去访问www.abc.com

[root@localhost_002 ~]# curl -x192.168.149.130:80 abc.com
abc.com[root@localhost_002 ~]# curl -x192.168.149.130:80 www.abc.com
abc.com[root@localhost_002 ~]#

注释:此时访问所有未定义的域名都会将访问地址只指向到默认虚拟主机,而因为我们已经开启虚拟主机配置文件(主配置文件会失效),所以此时的默认虚拟主机为配置文件conf/extra/httpd-vhosts.conf的第一个虚拟主机(在此为abc.com),效果如下:

[root@localhost_002 ~]# curl -x192.168.149.130:80 www.abcde.com
abc.com[root@localhost_002 ~]# curl -x 192.168.149.130:80 www.aaaaaa.com
abc.com[root@localhost_002 ~]#

默认虚拟主机:无论你访问什么域名,只有是解析到这个IP上,都会访问这个网站对应的虚拟主机配置:配置里的的第一个主机:

而此时访问www.example.com会访问到第二个虚拟主机,而不是主配置文件了,因为在虚拟配置文件第二个虚拟主机有定义的:

所以有两点需要注意下:

1、一旦打开了虚拟主机配置文件(httpd-vhosts),去掉注释,则主配置文件则会失效了(servername documentroot):

2、每个虚拟主机配置文件里,每一个VirtualHost都代表一个虚拟主机,第一个VirtualHost都代表一个虚拟主机:

3、默认虚拟主机,无论任何域名,解析到这个IP上,只要在虚拟主机里没有定义,都会访问这个域名:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  PHP Apache