day42:虛擬主機及apache和php結合:

一、雖然apache和php安裝完成,可是它們要結合到一塊兒纔可使用:以下:php

1:要修改httpd的主配置文件 /usr/local/apache2.4/conf/httpd.conf    #修改完成後須要重啓服務:有四處須要修改:html

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

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

3:重啓服務,即便配置文件有問題,也不會把進程殺掉/usr/local/apapche2.4/apache     gracefulvim

[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時會有如下提示,則是須要安裝以下操做:bash

[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         #須要把這一行的#號去掉才能夠:

二、apahce結合php:如上,咱們在httpd的配置文件裏定義了index.php,讓支持php的語法:app

測試:須要在默認頁/usr/local/apapche2.4/htdoc/目錄下:寫入一個1.php,內容以下:dom

[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顯示的信息會是同一個內容的:curl

爲何默認頁面會顯示/usr/local/apache/htdocs/,由於在httpd中有定義默認根目錄的位置:ide

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

二、默認虛擬主機:是指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會訪問到第二個虛擬主機,而不是主配置文件了,由於在虛擬配置文件第二個虛擬主機有定義的:

因此有兩點須要注意下:

一、一旦打開了虛擬主機配置文件(httpd-vhosts),去掉註釋,則主配置文件則會失效了(servername  documentroot):

二、每一個虛擬主機配置文件裏,每個VirtualHost都表明一個虛擬主機,第一個VirtualHost都表明一個虛擬主機:

三、默認虛擬主機,不管任何域名,解析到這個IP上,只要在虛擬主機裏沒有定義,都會訪問這個域名:

相關文章
相關標籤/搜索