| 相關(guān)模塊 | 相關(guān)指令 |
|---|---|
Apache啟動(dòng)時(shí),會(huì )綁定本機上的 地址 和 端口 ,然后等待請求的進(jìn)入。默認情況下,它會(huì )監聽(tīng)本機的所有地址。但是,當需要監聽(tīng)特定的地址或端口或地址與端口的組合,或者需要對不同的IP地址、主機名、端口作出不同的響應(如 使用 虛擬主機)時(shí),就必須明確指定。
Listen指令告訴 服務(wù)器 接只受來(lái)自特定端口(或地址+端口的組合)的請求。如果Listen指令僅指定了端口,則服務(wù)器會(huì )監聽(tīng)所有的IP地址;如果指定了地址+端口的組合,則服務(wù)器只監聽(tīng)來(lái)自此特定地址上特定端口的請求。使用多個(gè)Listen指令,可以指定在多個(gè)地址和端口上進(jìn)行監聽(tīng)。
例如:使服務(wù)器同時(shí)接受來(lái)自端口80和8000的請求,可以這樣寫(xiě):
Listen 80
Listen 8000
接受來(lái)自?xún)?strong style="color: black; background-color: #ff9999;">個(gè)指定的地址+端口的組合:
Listen 192.170.2.1:80
Listen 192.170.2.5:8000
IPv6地址必須用方括號括起來(lái):
Listen [2001:db8::a00:20ff:fea7:ccea]:80
有越來(lái)越多的平臺開(kāi)始支持IPv6 ,而APR在大多數平臺上也支持IPv6 ,使Apache能夠獲得IPv6套接字,并處理通過(guò)IPv6發(fā)送的請求。
一個(gè)經(jīng)常令Apache管理員疑惑的 問(wèn)題 是IPv6的套接字能否同時(shí)處理IPv4和IPv6的連接。IPv6套接字在處理IPv4連接時(shí)使用的是將IPv6映射到IPv4的地址(IPv4-mapped IPv6 addresses),這樣做在大多數平臺上默認是允許的,而在FreeBSD、NetBSD、OpenBSD上,為了配合其系統全局策略,默認卻是禁止的。即使在這些默認禁止的平臺上,Apache也可以通過(guò)特殊的編譯選項來(lái)改變這種行為。
另一方面,在某些平臺上(如Linux和Tru64)同時(shí)處理IPv6和IPv4的 唯一 方法就是使用映射地址(mapped addresses)。如果你希望Apache以最少的套接字同時(shí)處理IPv4和IPv6的連接,就必須使用映射到IPv4的IPv6地址,也就是必須指定--enable-v4-mapped編譯選項。
在除FreeBSD、NetBSD、OpenBSD以外的其他平臺上,--enable-v4-mapped是編譯時(shí)的默認值。因此你正在使用的Apache很可能就是按照這種方式編譯的。
要使Apache僅僅只處理IPv4連接,無(wú)論你的平臺是什么或者APR是否支持,只須對所有Listen指令都指定IPv4地址即可,如下所示:
Listen 0.0.0.0:80
Listen 192.170.2.1:80
如果你的平臺支持從IPv6到IPv4的地址映射,但是你又希望Apache使用不同的套接字分別處理IPv4和IPv6的連接(也就是禁用地址映射),必須明確指定--disable-v4-mapped編譯選項。注意:--disable-v4-mapped在FreeBSD、NetBSD、OpenBSD上是默認值。
Listen指令并不實(shí)現虛擬主機,它只是告訴主服務(wù)器(main server )去監聽(tīng)哪些地址和端口。如果沒(méi)有<VirtualHost>指令,服務(wù)器將對所有請求一視同仁;但是如果有<VirtualHost>指令,則服務(wù)器會(huì )對不同的地址和端口作出不同的響應。要實(shí)現虛擬主機,首先必須告訴服務(wù)器需要監聽(tīng)哪些地址和端口,然后為每個(gè)特定的地址和端口建立一個(gè)<VirtualHost>段來(lái)執行特定的相應。注意,如果將<VirtualHost>段設置為服務(wù)器沒(méi)有監聽(tīng)的地址和端口,則此段無(wú)效。
聯(lián)系客服