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