<-
Apache > HTTP Server > 文件 > 2.4 版

與地址及埠號繫結

可用的語言:  de  |  en  |  fr  |  ja  |  ko  |  tr 

組態 Apache HTTP Server 來監聽特定地址和埠號。

Support Apache!

另請參閱

top

概述

httpd 啟動時,它會繫結至本機上的其中一個埠號和地址,並等待傳入要求。預設情況下,它會監聽本機上的所有地址。然而,可能需要指示它監聽特定埠號,或僅監聽選定的地址,或兩者結合。這通常會與 虛擬主機 功能結合使用,這會決定 httpd 如何回應不同的 IP 地址、主機名稱和埠號。

Listen 指令會指示伺服器僅在指定的埠號或地址和埠號組合上接受傳入要求。如果僅在 Listen 指令中指定一個埠號,則伺服器會在所有介面上監聽指定的埠號。如果指定一個 IP 地址和一個埠號,則伺服器會在指定的埠號和介面上監聽。可以將多個 Listen 指令用於指定多個要監聽的地址和埠號。伺服器將回應來自任何列出的地址和埠號的要求。

例如,要讓伺服器在所有介面上接受埠號 80 和埠號 8000 上的連線,請使用

Listen 80
Listen 8000

要讓伺服器在一個介面上接受埠號 80 上的連線,而在另一個介面上接受埠號 8000 上的連線,請使用

Listen 192.0.2.1:80
Listen 192.0.2.5:8000

IPv6 地址必須加在方括號中,如下例所示

Listen [2001:db8::a00:20ff:fea7:ccea]:80

重疊的 監聽 指令會導致重大錯誤,而這將阻止伺服器啟動。

(48)該位址已在使用中:製作_插座:無法繫結到位址 [::]:80

wiki 中的討論 以取得進一步的疑難排解秘訣。

top

重新啟動時變更監聽組態

當 httpd 重新啟動時,對於變更 監聽 指令,必須特別考量。在重新啟動期間,httpd 會維持已繫結的埠(如下列原始組態),以避免對嘗試連線到伺服器的新連線產生「連線遭拒絕」錯誤。如果對使用的 監聽 指令組變更為與舊組態衝突的內容,組態就會失敗,而伺服器也會終止。

例如,從組態

Listen 127.0.0.1:80

變更為下列內容可能會失敗,因為繫結到所有位址的埠 80 會與僅在 127.0.0.1 上繫結到埠 80 產生衝突。

Listen 80

要讓此類組態變更生效,必須停止伺服器,然後重新啟動。

top

IPv6 特別考量

越來越多平台實作 IPv6,而 APR 支援大多數這些平台上的 IPv6,讓 httpd 能夠配置 IPv6 socket,並處理透過 IPv6 傳送的請求。

對於 httpd 管理員而言,一個令人困惑的因素是 IPv6 socket 是否可以同時處理 IPv4 連線和 IPv6 連線。使用 IPv6 socket 處理 IPv4 連線時,會使用 IPv4 對應 IPv6 位址,大多數平台預設允許這種作法,但 FreeBSD、NetBSD 和 OpenBSD 預設不允許,這是為了配合這些平台上的系統層級政策。在預設不允許的系統上,一個特別的 configure 參數可以為 httpd 變更這個行為。

另一方面,在某些平台上,例如 Linux 和 Tru64,處理 IPv6 和 IPv4 的唯一方式就是使用對應位址。如果您希望 httpd 使用最少 socket 數量處理 IPv4 和 IPv6 連線(這需要使用 IPv4 對應 IPv6 位址),請指定 --enable-v4-mapped configure 選項。

除了 FreeBSD、NetBSD 和 OpenBSD 之外,所有平台上預設值都是 --enable-v4-mapped,所以這可能是您的 httpd 建置方式。

如果您希望 httpd 只處理 IPv4 連線,而不論您的平台和 APR 支援什麼,請在所有 監聽 指令上指定 IPv4 位址,如下列範例所示

Listen 0.0.0.0:80
Listen 192.0.2.1:80

如果您的平台支援,而您希望 httpd 在分開 socket 上處理 IPv4 和 IPv6(也就是停用 IPv4 對應位址),請指定 --disable-v4-mapped configure 選項。FreeBSD、NetBSD 和 OpenBSD 上的預設值是 --disable-v4-mapped

top

使用監聽指定通訊協定

對大多數設定而言,Listen 的第二個可選參數 protocol並非必要。若未指定的話,連接埠 443 的預設協定為https,所有其他連接埠的預設協定為http。協定會用來決定由哪個模組來處理要求,以及透過 AcceptFilter 指令來套用特定於協定的最佳化。

只有在非標準連接埠上執行時,您才需要設定協定。例如,在連接埠 8443 上執行 https 網站

Listen 192.170.2.1:8443 https
top

這在虛擬主機上是如何運作的

Listen 指令並未實作虛擬主機 - 它只會告知主伺服器要監聽哪些位址與連接埠。如果沒有使用 <VirtualHost> 指令,那麼伺服器對所有接受到的要求,會以相同的方式處理。不過,<VirtualHost> 可以用來對一個或多個位址或連接埠指定不同的處理方式。若要實作虛擬主機,伺服器首先必須收到要監聽的位址與連接埠的指示。然後應為指定的位址與連接埠建立 <VirtualHost> 區段,以設定此虛擬主機的處理方式。請注意,如果 <VirtualHost> 設定給伺服器未監聽的位址與連接埠,則無法存取該設定。

可用的語言:  de  |  en  |  fr  |  ja  |  ko  |  tr 

top

留言

通知
這裡不是問與答區段。張貼在此的留言應指向改善文件或伺服器的建議事項,如果這些留言已實作,或被視為無效/離題,我們的管理員可能會將其移除。關於如何管理 Apache HTTP Server 的問題應定向至我們的 IRC 頻道,#httpd(在 Libera.chat 上),或傳送至我們的郵寄清單