新聞中心
Apache Web服務(wù)器可以在SAME服務(wù)器上托管多個網(wǎng)站。每個網(wǎng)站不需要單獨的服務(wù)器機器和apache軟件。這可以使用虛擬主機或VHost的概念來實現(xiàn)。

十年的白銀區(qū)網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。成都營銷網(wǎng)站建設(shè)的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整白銀區(qū)建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)從事“白銀區(qū)網(wǎng)站設(shè)計”,“白銀區(qū)網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。
要在Web服務(wù)器上托管的任何域(網(wǎng)站應(yīng)用)都將在apache配置文件中具有單獨的條目。
Apache虛擬主機類型
Apache虛擬主機類型有兩種 -
- 基于名稱的虛擬主機
- 基于地址或基于IP的虛擬主機。
1. 基于名稱的虛擬主機
基于名稱的虛擬主機用于在單個IP地址上托管多個虛擬站點。
要配置基于名稱的虛擬主機,需要設(shè)置要在其上接收所有所需網(wǎng)站的Apache請求的IP地址。可以通過apache配置中的NameVirutalHost指令(即/etc/httpd/conf/httpd.conf文件)執(zhí)行此操作。如下所示 -
NameVirtualHost *:80
ServerAdmin webmaster@yiibai.com
DocumentRoot /var/www/html/example1_com_dir
ServerName www.example1.com
ServerAdmin admin@yiibai.com
DocumentRoot /var/www/html/example2_com_dir
ServerName www.example2.com
Shell
您可以根據(jù)需要添加任意數(shù)量的虛擬主機。需要使用以下命令檢查Web配置文件是否有配置錯誤:
[root@115 conf.d]# httpd -t
Syntax error on line 978 of /etc/httpd/conf/httpd.conf:
Invalid command '*', perhaps misspelled or defined by a module not included in the server configuration
Shell
如上面顯示的結(jié)果可以發(fā)現(xiàn),配置文件存在語法配置錯誤,這時需要根據(jù)提示修改配置文件。直到?jīng)]有錯誤提示為止。當(dāng)配置文件有錯誤時,Apache是不能啟動的,這點需要注意。
2. 基于IP的虛擬主機
要設(shè)置基于IP的虛擬主機,需要在服務(wù)器上配置多個IP地址。因此,vhost apache的數(shù)量取決于服務(wù)器上配置的IP地址數(shù)量。如果您的服務(wù)器有10個IP地址,則可以創(chuàng)建10個基于IP的虛擬主機。
在上圖中,兩個網(wǎng)站example1.com和example2.com分配了不同的IP并使用基于IP的虛擬主機。
Listen 192.168.0.100:80
ServerAdmin webmaster@example1.com
DocumentRoot /var/www/html/example1_com_dir
ServerName www.example1.com
ServerAdmin admin@example2.com
DocumentRoot /var/www/html/example1_com_dir
ServerName www.example2.com
Shell
3. 虛擬主機配置示例
這一小節(jié)中將列出有關(guān)設(shè)置虛擬主機的常見問題。這些方案涉及通過基于名稱或基于IP的虛擬主機在單個服務(wù)器上運行的多個網(wǎng)站。
3.1. 在單個IP地址上運行多個基于域名的網(wǎng)站
如果服務(wù)器有多個主機名可以解析為單個地址,您希望對www.example.com和www.example.org做出不同的響應(yīng)。
在Apache服務(wù)器上創(chuàng)建虛擬主機配置不會神奇地導(dǎo)致為這些主機名創(chuàng)建DNS條目。您必須擁有DNS中的名稱,解析為您的IP地址,否則其他人都無法訪問您的網(wǎng)站??梢詫l目放在
hosts文件中以進(jìn)行本地測試,但這僅適用于具有這些主機條目的計算機。
# Ensure that Apache listens on port 80
Listen 80
DocumentRoot "/var/www/example1"
ServerName www.example.com
# Other directives here
DocumentRoot "/var/www/example2"
ServerName www.example.org
# Other directives here
Shell
3.2. 多個IP地址上基于名稱的主機
服務(wù)器有兩個(或更多個)IP地址。一個IP地址是:172.20.30.40,我們將服務(wù)于“主”服務(wù)器server.example.com,另一個IP地址是:172.20.30.50,我們將服務(wù)兩個或更多虛擬主機。
Listen 80
# This is the "main" server running on 172.20.30.40
ServerName server.example.com
DocumentRoot "/www/mainserver"
DocumentRoot "/www/example1"
ServerName www.example.com
# Other directives here ...
DocumentRoot "/www/example2"
ServerName www.example.org
# Other directives here ...
Shell
對172.20.30.50以外的地址的任何請求都將從主服務(wù)器提供。將向www.example.com提供對172.20.30.50的請求,其中包含未知主機名或無Host:標(biāo)頭。
3.3. 在不同的IP地址(例如內(nèi)部和外部地址)上提供相同的內(nèi)容
服務(wù)器計算機有兩個IP地址(192.168.1.1和172.20.30.40)。機器位于內(nèi)部(Intranet)網(wǎng)絡(luò)和外部(Internet)網(wǎng)絡(luò)之間。在網(wǎng)絡(luò)外部,名稱server.example.com解析為外部地址(172.20.30.40),但在網(wǎng)絡(luò)內(nèi)部,同一名稱解析為內(nèi)部地址(192.168.1.1)。
只需一個部分,就可以使服務(wù)器響應(yīng)具有相同內(nèi)容的內(nèi)部和外部請求。
DocumentRoot "/www/server1"
ServerName server.example.com
ServerAlias server
Shell
3.4. 在不同端口上運行不同的站點
假設(shè)您有多個域轉(zhuǎn)到同一個IP,并且還希望為多個端口提供服務(wù)。下面的示例說明了在確定最佳匹配的IP地址和端口組合之后進(jìn)行名稱匹配。
Listen 80
Listen 8080
ServerName www.example.com
DocumentRoot "/www/domain-80"
ServerName www.example.com
DocumentRoot "/www/domain-8080"
ServerName www.example.org
DocumentRoot "/www/otherdomain-80"
ServerName www.example.org
DocumentRoot "/www/otherdomain-8080"
Shell
3.4. 基于IP的虛擬主機
服務(wù)器有兩個IP地址(172.20.30.40和172.20.30.50),分別解析為www.example.com和www.example.org。
Listen 80
DocumentRoot "/www/example1"
ServerName www.example.com
DocumentRoot "/www/example2"
ServerName www.example.org
Shell
對于未在其中一個指令中指定的任何地址(例如localhost)的請求將轉(zhuǎn)到主服務(wù)器(如果有)。
3.5. 基于混合端口和基于IP的虛擬主機
服務(wù)器機器有兩個IP地址(172.20.30.40和172.20.30.50),分別解析為www.example.com和www.example.org。在每種情況下,都希望在端口80和8080上運行主機。
Listen 172.20.30.40:80
Listen 172.20.30.40:8080
Listen 172.20.30.50:80
Listen 172.20.30.50:8080
DocumentRoot "/www/example1-80"
ServerName www.example.com
DocumentRoot "/www/example1-8080"
ServerName www.example.com
DocumentRoot "/www/example2-80"
ServerName www.example.org
DocumentRoot "/www/example2-8080"
ServerName www.example.org
Shell
3.6. 混合基于名稱和基于IP的虛擬主機
永遠(yuǎn)不會出現(xiàn)在另一個虛擬主機中的虛擬主機參數(shù)中提到的任何地址都是嚴(yán)格基于IP的虛擬主機。
Listen 80
DocumentRoot "/www/example1"
ServerName www.example.com
DocumentRoot "/www/example2"
ServerName www.example.org
DocumentRoot "/www/example3"
ServerName www.example.net
# IP-based
DocumentRoot "/www/example4"
ServerName www.example.edu
DocumentRoot "/www/example5"
ServerName www.example.gov
Shell
3.7. Virtual_host和mod_proxy一起使用
以下示例允許前端計算機將虛擬主機代理到另一臺計算機上運行的服務(wù)器。在該示例中,在192.168.111.2的計算機上配置了同名的虛擬主機。如果我們將多個主機名代理到單個機器,則使用ProxyPreserveHost On指令以便傳遞所需的主機名。
ProxyPreserveHost On
ProxyPass "/" "http://192.168.111.2/"
ProxyPassReverse "/" "http://192.168.111.2/"
ServerName hostname.example.com
Shell
3.8. 使用 default vhosts
default vhosts適用于所有端口
捕獲對任何未指定的IP地址和端口的每個請求,即未用于任何其他虛擬主機的地址/端口組合。
DocumentRoot "/www/default"
Shell
使用帶有通配符端口的默認(rèn)虛擬主機可以有效地阻止任何請求進(jìn)入主服務(wù)器。
默認(rèn)虛擬主機從不提供發(fā)送到用于基于名稱的虛擬主機的地址/端口的請求。如果請求包含未知或無Host:標(biāo)頭,則始終從基于主名稱的虛擬主機(配置文件中首先出現(xiàn)的該地址/端口的虛擬主機)提供服務(wù)。
您可以使用AliasMatch或RewriteRule將任何請求重寫到單個信息頁面(或腳本)。
default vhosts 用于不同的端口
與上面的設(shè)置相同,但服務(wù)器偵聽多個端口,我們希望將第二個_default_ vhost用于端口80。
DocumentRoot "/www/default80"
# ...
DocumentRoot "/www/default"
# ...
Shell
端口80的默認(rèn)虛擬主機(必須出現(xiàn)在具有通配符端口的任何默認(rèn)虛擬主機之前)會捕獲發(fā)送到未指定IP地址的所有請求。主服務(wù)器從不用于提供請求。
default vhosts用于一個端口
我們希望端口80具有默認(rèn)虛擬主機,但沒有其他默認(rèn)虛擬主機。
DocumentRoot "/www/default"
...
Shell
從默認(rèn)虛擬主機提供對端口80上未指定地址的請求。從主服務(wù)器提供對未指定地址和端口的任何其他請求。
在虛擬主機聲明中使用*的優(yōu)先級高于_default_。
3.9. 將基于名稱的虛擬主機遷移到基于IP的虛擬主機
主機名為www.example.org的基于名稱的虛擬主機(來自我們基于名稱的示例,設(shè)置2)應(yīng)該獲得自己的IP地址。為避免名稱服務(wù)器或緩存基于名稱的虛擬主機的舊IP地址的代理出現(xiàn)問題,我們希望在遷移階段提供這兩種變體。
解決方案很簡單,因為我們可以簡單地將新的IP地址(172.20.30.50)添加到VirtualHost指令中。
Listen 80
ServerName www.example.com
DocumentRoot "/www/example1"
DocumentRoot "/www/example2"
ServerName www.example.org
# ...
DocumentRoot "/www/example3"
ServerName www.example.net
ServerAlias *.example.net
# ...
Shell
現(xiàn)在可以通過新地址(作為基于IP的虛擬主機)和舊地址(作為基于名稱的虛擬主機)訪問虛擬主機。
4.0. 使用ServerPath指令
我們有一個帶有兩個基于名稱的虛擬主機的服務(wù)器。為了匹配正確的虛擬主機,客戶端必須發(fā)送正確的Host:頭。舊的HTTP/1.0客戶端不發(fā)送這樣的頭,Apache不知道客戶端試圖訪問什么虛擬主機(并從主虛擬主機提供請求)。為了提供盡可能多的向后兼容性,我們創(chuàng)建了一個主虛擬主機,它返回一個包含帶有URL前綴的鏈接的單個頁面到基于名稱的虛擬主機。
# primary vhost
DocumentRoot "/www/subdomain"
RewriteEngine On
RewriteRule "." "/www/subdomain/index.html"
# ...
DocumentRoot "/www/subdomain/sub1"
ServerName www.sub1.domain.tld
ServerPath "/sub1/"
RewriteEngine On
RewriteRule "^(/sub1/.*)" "/www/subdomain$1"
# ...
DocumentRoot "/www/subdomain/sub2"
ServerName www.sub2.domain.tld
ServerPath "/sub2/"
RewriteEngine On
RewriteRule "^(/sub2/.*)" "/www/subdomain$1"
# ...
Shell
由于ServerPath指令,始終從sub1-vhost提供對URL http://www.sub1.domain.tld/sub1/的請求。
如果客戶端發(fā)送了正確的Host:頭,則僅從sub1-vhost提供對URL http://www.sub1.domain.tld/的請求。如果沒有發(fā)送Host:頭,則客戶端從主要主機獲取信息頁面。
請注意,有一個奇怪之處:如果客戶端沒有發(fā)送Host:頭,則還會從sub1-vhost提供對http://www.sub2.domain.tld/sub1/的請求。
網(wǎng)站題目:創(chuàng)新互聯(lián)apache教程:Apache 虛擬主機
網(wǎng)頁網(wǎng)址:http://m.5511xx.com/article/dpcgcpd.html


咨詢
建站咨詢
