本教程將介紹如何配置Apache以監聽指定地址和端口。
當Apache啟動時,它會綁定到本地電腦上的某個端口和地址,並等待傳入的請求。默認情況下,它會監聽電腦上的所有地址。但是,可能需要告知監聽特定端口,或僅監聽選定地址,或兩者的組合。這通常與虛擬主機功能結合使用,後者確定Apache如何回應不同的IP地址,主機名和端口。
Listen
指令告訴伺服器僅接受指定端口或地址和端口組合的傳入請求。如果在Listen
指令中僅指定了端口號,則伺服器將監聽所有介面上的給定端口。如果給出IP地址和端口,伺服器將監聽給定的端口和介面。可以使用多個Listen
指令來指定要監聽的多個地址和端口。伺服器將回應來自任何列出的地址和端口的請求。
例如,要使伺服器接受端口80
和端口8000
上的連接,請在所有介面上使用:
Listen 80
Listen 8000
要使伺服器接受指定IP端口80
和端口8000
上的連接,請使用 -
Listen 192.0.2.1:80
Listen 192.0.2.5:8000
IPv6地址必須用方括號括起來,如下例所示:
Listen [2001:db8::a00:20ff:fea7:ccea]:80
IPv6注意事項
越來越多的平臺實現IPv6,APR在大多數平臺上支持IPv6,允許Apache分配IPv6套接字,並處理通過IPv6發送的請求。
Apache管理員的一個複雜因素是IPv6套接字是否可以同時處理IPv4連接和IPv6連接。使用IPv6套接字處理IPv4連接使用IPv4映射的IPv6地址,這些地址在大多數平臺上是默認允許的,但在FreeBSD,NetBSD和OpenBSD上默認是不允許的,以便匹配這些平臺上的系統範圍策略。在默認情況下不允許它的系統上,指定configure
參數可以更改Apache的此行為。
另一方面,在某些平臺上,例如Linux和Tru64,處理IPv6和IPv4的唯一方法是使用映射地址。如果希望Apache使用最少的套接字來處理IPv4和IPv6連接,這需要使用IPv4映射的IPv6地址,請指定--enable-v4-mapped configure
選項。
--enable-v4-mapped
是除FreeBSD,NetBSD和OpenBSD之外的所有平臺的默認設置,因此它就是構建Apache的方式。
如果您希望Apache僅處理IPv4連接,無論平臺和APR支持什麼,請在所有Listen
指令上指定IPv4地址,如以下示例所示:
Listen 0.0.0.0:80
Listen 192.0.2.1:80
如果您的平臺支持它並且希望Apache在單獨的套接字上處理IPv4和IPv6連接(即,禁用IPv4映射的地址),請指定--disable-v4-mapped configure
選項。--disable-v4-mapped
是FreeBSD,NetBSD和OpenBSD的默認設置。
如何使用虛擬主機
Listen指令不實現虛擬主機 - 它只告訴主伺服器要監聽的地址和端口。如果未使用<VirtualHost>
指令,則伺服器對所有已接受的請求的行為方式相同。但是,<VirtualHost>
可用於為一個或多個地址或端口指定不同的行為。要實現VirtualHost
,必須首先告訴伺服器監聽要使用的地址和端口。然後,應為指定的地址和端口創建<VirtualHost>
部分,以設置此虛擬主機的行為。請注意,如果為伺服器未偵聽的地址和端口設置<VirtualHost>
,則無法訪問它。