一臺服務(wù)器一般對應(yīng)一個IP地址,但是一個IP地址下面卻可以擁有很多網(wǎng)站。這是為什么呢?服務(wù)器是如何分辨出來這些相同IP所對應(yīng)的到底是哪一個網(wǎng)站呢?
先了解服務(wù)器是如何工作的:
(1)客戶端發(fā)送請求
客戶端(通過瀏覽器)和Web服務(wù)器建立TCP連接,連接建立以后,向Web服務(wù)器發(fā)出訪問請求(如get)。根據(jù)HTTP協(xié)議,該請求中包含了客戶端的IP地址、瀏覽器的類型和請求的URL等一系列信息。
(2)服務(wù)器解析請求
Web服務(wù)器對請求按照HTTP協(xié)議進(jìn)行解碼來確定進(jìn)一步的動作,設(shè)計的內(nèi)容有三鼐要點:方法(GET)、文檔(/sample.html)、和瀏覽器使用的協(xié)議(HTTP/1.1)其中方法告訴服務(wù)器應(yīng)完動的動作,GET方法的含義很明顯是:服務(wù)器應(yīng)定位、讀取文件并將它返回給客戶。
Web服務(wù)器軟件現(xiàn)在就知道了,它應(yīng)該找到文件/sample.html,并使用HTTP/1.1協(xié)議將內(nèi)存返回給客戶。信息是經(jīng)過與請求到來相同的連接發(fā)出的,所以服務(wù)器不需要定們客戶或創(chuàng)建新的連接。
(3)讀取其它信息(非必須步驟)
Web服務(wù)器根據(jù)需要去讀取請求的其它部分。在HTTP/1.1下,客戶還應(yīng)給服務(wù)器提供關(guān)于它的一些信息。元信息(metainformation)可用來描述瀏覽器及其能力,以使服務(wù)器能據(jù)此確定如何返回應(yīng)答。
(4)完成請求的動作
若現(xiàn)在沒有錯誤出現(xiàn),WWW服務(wù)器將執(zhí)行請求所要求的動作。要獲?。℅ET)一個文檔,web服務(wù)器在其文檔樹中搜索請求的文件(/sample.html)。這是由服務(wù)器機(jī)器上作為操作系統(tǒng)一部分的文件系統(tǒng)完成的。若文件能找到并可正常讀取,則服務(wù)器將把它返回給客戶。
如果成功:文件被發(fā)送出去。
在服務(wù)器解析請求的時候,就將傳輸過來的數(shù)據(jù)進(jìn)行匹配,如果在apache的配置文件中可以匹配到相應(yīng)的配置文件,就使用相對應(yīng)的配置文件,如果沒有匹配到的話就使用默認(rèn)的配置文件來訪問服務(wù)器,一般的網(wǎng)站在建立站點的時候就會生成一個相對應(yīng)的配置文件,輸入相對應(yīng)的網(wǎng)址,就會使用相對應(yīng)的配置文件;
下面是一個配置文件的例子:
ServerName 192.168.1.49:801 DocumentRoot "E:/PHP/test" Options FollowSymLinks IncludesNOEXEC Indexes DirectoryIndex test.php AllowOverride None Order Deny,Allow Allow from all
1.Listen 要監(jiān)聽的端口,多個端口,要寫多個Listen;否則Apache啟動的時候,不會啟動相應(yīng)的接口。
比如:
Listen 80
Listen 8080
2.NameVirtualHost 如果沒有這個,
(感謝okiwill的指正,這里特指基于域名訪問的情況,若是基于IP訪問的,以第一個指定IP的VirtualHost為準(zhǔn),每個IP可以單獨指定)
一個NameVirtualHost 可以對用多個
NameVirutalHost *:80
制定這個主機(jī)的IP和端口,如果服務(wù)器上有多個IP,就可以制定某個IP的某個端口是哪個 主機(jī)。
(新版的Apache已經(jīng)去除了NameVirtualHost 這個配置,因為確實沒什么用,參數(shù)在VirtualHost中都已經(jīng)指明了)
3.最關(guān)鍵的VirtualHost
重要:Apache 在接受到請求時,首先會默認(rèn)第一個VirtualHost,然后再找匹配的,如果沒有匹配的,就是第一個VirtualHost起作用。
因此在httpd.conf中,將
和