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