Apache HTTP Server 2.4 版
說明 | Apache HTTP Server 在傾印核心之前嘗試切換到的目錄 |
---|---|
語法 | CoreDumpDirectory directory |
預設值 | 查看用法取得預設設定 |
內容 | 伺服器設定 |
狀態 | MPM |
模組 | event , worker , prefork |
在傾印核心之前,這控制著 Apache httpd 嘗試切換到的目錄。如果你的作業系統設定為在崩潰程序的工作目錄中建立核心檔案,則 CoreDumpDirectory
是必要的,以便變更工作目錄從預設的 ServerRoot
目錄,這不應該是伺服器執行時用戶所寫入的。
如果你想要一個核心傾印用於偵錯,你可以使用這個指令把它放在一個不同的位置。如果你的作業系統沒有設定在崩潰程序的工作目錄中寫入核心檔案,則這個指令沒有效用。
在 Linux 中使用這個指令可能會允許系統上的其他程序 (如果執行具有相似的特權,例如 CGI 程式碼) 經由 `ptrace` 系統呼叫附加到 httpd 子行程。這可能會削弱對某些安全攻擊的防護。不建議在生產系統中使用這個指令。
如果 Apache httpd 以 root 身分啟動,並切換到另一個使用者,則 Linux 核心會停用核心傾印,即使該目錄對該程序具有寫入權限。Apache httpd (2.0.46 和更新版本) 在 Linux 2.4 以上版本中重新啟用核心傾印,但前提是你明確設定了 CoreDumpDirectory
。
若要啟用 BSD 系統 (例如 FreeBSD) 中 suid 可執行檔的核心傾印,將 `kern.sugid_coredump` 設為 1。
CoreDumpDirectory
處理僅會針對一組特定致命信號發生:SIGFPE、SIGILL、SIGABORT、SIGSEGV 和 SIGBUS。
在某些作業系統中,SIGQUIT 也會導致核心傾印,但不會經過 CoreDumpDirectory
或 EnableExceptionHook
處理,因此核心位置完全由作業系統決定。
說明 | 啟用一個掛勾,在崩潰後執行異常處理常式 |
---|---|
語法 | EnableExceptionHook 開啟|關閉 |
預設值 | EnableExceptionHook 關閉 |
內容 | 伺服器設定 |
狀態 | MPM |
模組 | event , worker , prefork |
出於安全的理由,此指令僅在伺服器使用 `--enable-exception-hook` 選項設定時才可用。它會啟用一個掛勾,允許外部模組插入,並在子行程崩潰後執行某些操作。
已經有兩個模組使用這個掛勾:mod_whatkilledus
和 mod_backtrace
。請參閱 Jeff Trawick 的 EnableExceptionHook 網站 以進一步了解這些模組。
說明 | 指定一個時間限制,在時間限制後,正常關閉的伺服器將會退出。 |
---|---|
語法 | GracefulShutdownTimeout 秒數 |
預設值 | GracefulShutdownTimeout 0 |
內容 | 伺服器設定 |
狀態 | MPM |
模組 | event , worker , prefork |
相容性 | 可在 2.2 版本和後續版本中使用 |
GracefulShutdownTimeout
指示伺服器在收到「正常終止」信號後,應繼續執行多少秒以處理現有的連線。
將此數值設定為零表示伺服器將無限期地等待,直到所有剩餘的要求已完全服務為止。
說明 | 伺服器傾聽的 IP 位址和連接埠 |
---|---|
語法 | Listen [IP-address:]portnumber [protocol] |
內容 | 伺服器設定 |
狀態 | MPM |
模組 | event 、worker 、prefork 、mpm_winnt 、mpm_netware 、mpmt_os2 |
相容性 | 在 2.1.5 中加入了 protocol 參數。 |
Listen
指令指示 Apache httpd 僅傾聽特定的 IP 位址或連接埠;它預設會對所有 IP 介面上的要求做出回應。Listen
現在是必要的指令。如果它不在設定檔中,伺服器將無法啟動。這是 Apache httpd 之前版本中的變更。
Listen
指令告訴伺服器在指定的連接埠或位址與連接埠組合上接受傳入的要求。如果只指定連接埠號碼,伺服器會在所有介面上傾聽給定的連接埠。如果同時給出 IP 位址和連接埠,伺服器會在給定的連接埠和介面上傾聽。
可以透過多個 Listen
指令來指定多個要傾聽的位址和連接埠。伺服器將對列出的任何位址和連接埠中的要求做出回應。
例如,如要讓伺服器在連接埠 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
對於大多數組態,選擇性的 protocol 參數都不是必要的。如果未指定,連接埠 443 的預設值是 https
,所有其他連接埠的預設值是 http
。這個協定用於決定哪個模組應處理要求,以及使用 AcceptFilter
指令套用協定特定的最佳化。
只需在非標準連接埠上執行時才需要設定協定。例如,在連接埠 8443 上執行 https
網站
Listen 192.170.2.1:8443 https
Listen
指令將導致 Address already in use
錯誤訊息。說明 | 處理連線佇列的最大長度 |
---|---|
語法 | ListenBackLog 後援 |
預設值 | ListenBackLog 511 |
內容 | 伺服器設定 |
狀態 | MPM |
模組 | event 、worker 、prefork 、mpm_winnt 、mpm_netware 、mpmt_os2 |
處理連線佇列的最大長度。通常不需要或不希望調整;但是,在某些系統上,在面對 TCP SYN 洪水攻擊時,需要增加這個值。請參閱 listen(2)
系統呼叫的 backlog 參數。
這個值通常會受到作業系統的限制,以較小的數字呈現。這會因作業系統的不同而異。此外,請注意許多作業系統不會使用設定為後援的確切值,而是使用一個基於後援(但通常大於後援)的數字。
說明 | CPU 核心數量(線上)與監聽器儲存區數量的比值 |
---|---|
語法 | ListenCoresBucketsRatio 比率 |
預設值 | ListenCoresBucketsRatio 0(停用) |
內容 | 伺服器設定 |
狀態 | MPM |
模組 | event , worker , prefork |
相容性 | 可在 Apache HTTP 伺服器 2.4.17 中使用,且支援 socket 選項 SO_REUSEPORT 的核心,並使用此選項在監聽程序(或執行緒)的 socket 上平均分派新的連線(例如 Linux 3.9 和更新版本,但不包含 *BSD 中 SO_REUSEPORT 的現行實作。 |
可以使用(線上)CPU 核心數量與監聽器儲存區數量的 比率,讓 Apache HTTP 伺服器建立 num_cpu_cores / ratio
的監聽儲存區,每個儲存區包含其自己在相同埠上的 Listen
-ing socket(數個),然後讓每個子處理單一儲存區(在建立子項目的時間點以循環分配儲存區)。
如果已設定 熱插拔, 則可在 Linux(以及 BSD)上啟用/停用 CPU 核心;因此,ListenCoresBucketsRatio
在計算要建立的儲存區數量時,需要考慮這個參數。
ListenCoresBucketsRatio
在接受新的連線時,如果/已成為瓶頸,則可以提升擴充性。在具有大量 CPU 核心的系統上,啟用這個功能已經過測試,顯示出顯著的效能提升和更短的回應時間。
CPU 核心的數量必須至少為設定的 比率 的兩倍,這個功能才能啟用。建議的 比率 為 8
,因此,當使用這個值時,執行時期必須至少有 16
個核心可用。針對每個目標系統,都需要計算出獲得最佳效能的正確 比率,測試多個值並觀察關鍵效能指標的變化。
此指令會影響 MinSpareThreads
和 MaxSpareThreads
下界值的計算。要最佳化接受連線,子處理程序的數量必須是儲存區數量的倍數。
Listen
er 或 Apache HTTP 伺服器設定聆聽 Socket 上的 SO_REUSEPORT
選項,隨後允許多個處理程序(共用相同的 EUID
,例如 root
)繫結到相同的 IP 位址和埠,而不發生系統在一般情況下引發的繫結錯誤。
這也表示,在同一個 IP:port
上設定且
為正數的 Apache httpd 多個執行個體也會在沒有錯誤的情況下啟動,然後讓進入連線平均分配給兩個執行個體執行(這絕不屬於推薦或任何情況下合理的用法,只是一則這會防止偵測到類似可能的議題的通知)。ListenCoresBucketsRatio
在同一個執行個體中,Apache httpd 會檢查並在完全相同的 IP(或主機名稱)和埠上設定多個
指令時失敗開始執行,因而避免產生會造成效能低落且無用的部分重複儲存區。但它無法(也絕對不會)盡力蒐集所有可能的重複情況(例如主機名稱解析成其他地方使用的 IP)。Listen
說明 | 限制個別子伺服器將在其執行期間處理的連線數目 |
---|---|
語法 | MaxConnectionsPerChild 數字 |
預設值 | MaxConnectionsPerChild 0 |
內容 | 伺服器設定 |
狀態 | MPM |
模組 | event 、worker 、prefork 、mpm_winnt 、mpm_netware 、mpmt_os2 |
相容性 | 適用於 Apache HTTP Server 2.3.9 和之後版本。舊名稱 MaxRequestsPerChild 仍受支援。 |
指令會設定個別子伺服器處理程序處理的連線數目限制。MaxConnectionsPerChild
連線數之後,子處理程序就會中止。如果 MaxConnectionsPerChild
是 MaxConnectionsPerChild
0
,則處理程序就不會過期。
將
設定為非零值會限制處理程序可能透過(意外的)記憶體洩漏消耗的記憶體量。MaxConnectionsPerChild
說明 | 主要配置器允許保留而不呼叫 free() 的最大記憶體容量 |
---|---|
語法 | MaxMemFree KBytes |
預設值 | MaxMemFree 2048 |
內容 | 伺服器設定 |
狀態 | MPM |
模組 | 、 、 、 、
|
指令會設定每個配置器允許保留而不呼叫 MaxMemFree
free()
的最大可用 Kbytes 數。在執行緒 MPM 中,每個執行緒有其自己的配置器。設定為零時,會將此閾值設定為無限。
說明 | 同時處理連線的最大數目 |
---|---|
語法 | MaxRequestWorkers 數字 |
預設值 | 請參閱用法以查看詳細資料 |
內容 | 伺服器設定 |
狀態 | MPM |
模組 | event , worker , prefork |
指令 MaxRequestWorkers
設定可同時處理之要求數量限制。高過 MaxRequestWorkers
限制的任何連線嘗試將會排隊,其數量基礎為指令 ListenBacklog
所定義。當處理其他要求後釋放子程序時,連線將會獲得處理。
對於非執行緒伺服器(也就是 prefork
),MaxRequestWorkers
轉換成將啟動以處理要求的子程序之最大數量。預設值為 256
;若要增加它,亦必須提高 ServerLimit
。
對於執行緒與混合式伺服器(例如 event
或 worker
),MaxRequestWorkers
限制可供提供給客戶端服務之執行緒總數。對於混合 MPM,預設值為 16(ServerLimit
)乘以 25(ThreadsPerChild
)的值。因此,若要增加 MaxRequestWorkers
至需要超過 16 個程序的數值,亦必須提高 ServerLimit
。
MaxRequestWorkers
在 2.3.13 版之前稱為 MaxClients
。舊名稱仍受支援。
說明 | 閒置執行緒之最大數量 |
---|---|
語法 | MaxSpareThreads number |
預設值 | 請參閱用法以查看詳細資料 |
內容 | 伺服器設定 |
狀態 | MPM |
模組 | event , worker , mpm_netware , mpmt_os2 |
閒置執行緒之最大數量。不同的 MPM 對此指令的處理方式不同。
對於 worker
和 event
,預設值為 MaxSpareThreads 250
。這些 MPM 以伺服器層級處理閒置執行緒。如果伺服器中的閒置執行緒過多,則子程序會被終止,直到閒置執行緒數量低於該數值為止。如果啟用 ListenCoresBucketsRatio
,可能會建立額外的程序/執行緒。
對於 mpm_netware
,預設值為 MaxSpareThreads 100
。由於此 MPM 執行單一程序,因此備用執行緒數量也是伺服器層級的。
mpmt_os2
的運作方式類似於 mpm_netware
。對於 mpmt_os2
,預設值為 10
。
指令 MaxSpareThreads
值的範圍有限。Apache httpd 會根據以下規則自動修正所提供的值
mpm_netware
希望此值大於 MinSpareThreads
。worker
和 event
,這個值必須等於或大於 MinSpareThreads
和 ThreadsPerChild
的總和。說明 | 空閒執行緒的最小數量可處理請求高峰 |
---|---|
語法 | MinSpareThreads 數字 |
預設值 | 請參閱用法以查看詳細資料 |
內容 | 伺服器設定 |
狀態 | MPM |
模組 | event , worker , mpm_netware , mpmt_os2 |
處理請求高峰的空閒執行緒的最小數量。不同的 MPM 處理此指令的方式不同。
worker
和 event
的預設是 MinSpareThreads 75
,而且以伺服器為基礎處理空閒執行緒。如果伺服器沒有足夠的空閒執行緒,則會建立子程序,直到空閒執行緒的數量大於 數字。如果啓用 ListenCoresBucketsRatio
,系統可能建立其他程序/執行緒。
mpm_netware
的預設是 MinSpareThreads 10
,而且由於它是單獨程序的 MPM,系統以伺服器為基礎追蹤這一點。
mpmt_os2
的運作方式類似於 mpm_netware
。對於 mpmt_os2
,預設值是 5
。
說明 | 伺服器記錄守護程序處理序 ID 的檔案 |
---|---|
語法 | PidFile 檔案名稱 |
預設值 | PidFile logs/httpd.pid |
內容 | 伺服器設定 |
狀態 | MPM |
模組 | event , worker , prefork , mpm_winnt , mpmt_os2 |
PidFile
指令設定伺服器記錄守護程序處理序 ID 的檔案。如果檔案名稱不是絕對路徑,則假設它相對於 ServerRoot
。
PidFile /var/run/apache.pid
通常可以向伺服器傳送訊號很方便,讓它關閉,然後重新開啟其 ErrorLog
和 TransferLog
,然後重新讀取其設定檔。這樣做是藉由傳送 SIGHUP 訊號 (kill -1) 到 PidFile
中列出的處理序 ID。
PidFile
會受到關於日誌檔案儲存位置和 安全性 的相同警告規範。
從 Apache HTTP Server 2 開始,我們建議你只使用 apachectl
腳本,或作業系統提供的 init 腳本,來 (重新) 啟動或停止伺服器。
說明 | TCP接收緩衝區大小 |
---|---|
語法 | ReceiveBufferSize 位元組 |
預設值 | ReceiveBufferSize 0 |
內容 | 伺服器設定 |
狀態 | MPM |
模組 | event 、worker 、prefork 、mpm_winnt 、mpm_netware 、mpmt_os2 |
伺服器將設定TCP接收緩衝區大小為指定的位元組數目。
如果設定為0
,伺服器將使用作業系統預設值。
說明 | 用於儲存子程序協調資料的檔案位置 |
---|---|
語法 | ScoreBoardFile 檔案路徑 |
預設值 | ScoreBoardFile 日誌/apache_runtime_status |
內容 | 伺服器設定 |
狀態 | MPM |
模組 | 事件 ,工作者 ,前置 fork ,mpm_winnt |
Apache HTTP伺服器使用記分板在主程序和子程序之間進行通訊。有些架構需要一個檔案來簡化此通訊。如果未指定檔案,Apache httpd首先嘗試完全在記憶體中(使用匿名共用記憶體)建立記分板,然後會嘗試在磁碟上建立檔案(使用基於檔案的共用記憶體)。指定此指令會導致Apache httpd始終在磁碟上建立檔案。
ScoreBoardFile /var/run/apache_runtime_status
基於檔案的共用記憶體對於需要直接存取記分板的第三方應用程式很有用。
如果您使用ScoreBoardFile
,那麼將其放在RAM磁碟上可能會提高速度。但是請小心,您必須注意日誌檔放置及安全性的相同警告事項。
說明 | TCP緩衝區大小 |
---|---|
語法 | SendBufferSize 位元組 |
預設值 | SendBufferSize 0 |
內容 | 伺服器設定 |
狀態 | MPM |
模組 | event 、worker 、prefork 、mpm_winnt 、mpm_netware 、mpmt_os2 |
將伺服器的TCP傳送緩衝區大小設定為指定的位元組數目。通常會在高速、高延遲連線(即100毫秒左右,例如洲際快速通道)上將其設定為作業系統標準預設值。
如果設定為0
,伺服器將使用作業系統提供的預設值。
可能需要進一步設定作業系統,才能在高速、高延遲連線中獲得更好的效能。
在某些作業系統上,EnableSendfile
未設定為關閉,則可能看不到因較大的SendBufferSize
所導致的TCP行為變更。此互動作用僅適用於靜態檔案。
說明 | 可設定程序數量的上限 |
---|---|
語法 | ServerLimit 數目 |
預設值 | 請參閱用法以查看詳細資料 |
內容 | 伺服器設定 |
狀態 | MPM |
模組 | event , worker , prefork |
對於 prefork
MPM,此指令設定 Apache httpd 程序生命期中 MaxRequestWorkers
的最大設定值。對於 worker
和 event
MPM,此指令與 ThreadLimit
結合使用時,會設定 Apache httpd 程序生命期中 MaxRequestWorkers
的最大設定值。對於 event
MPM,此指令也定義了多少個舊的伺服器程序可以持續執行並完成正在進行的連線處理。重新啟動期間變更此指令的任何嘗試都會遭到忽略,但 MaxRequestWorkers
可以在重新啟動期間修改。
使用此指令時必須特別小心。如果將 ServerLimit
設定為遠高於必要的數值,會配置額外的未使用共享記憶體。如果將 ServerLimit
和 MaxRequestWorkers
都設定為系統無法處理的數值,Apache httpd 可能無法啟動,或系統可能不穩定。
在 prefork
MPM 中,僅當您需要將 MaxRequestWorkers
設定得比 256 (預設值) 還高時,才使用此指令。請勿將此指令的設定值設定得比您可能想要設定為 MaxRequestWorkers
的值高。
在 worker
中,僅當 MaxRequestWorkers
和 ThreadsPerChild
設定需要多於 16 個伺服器程序 (預設值) 時,才使用此指令。請勿將此指令的設定值設定得比由您可能想要達到的 MaxRequestWorkers
和 ThreadsPerChild
所需要的伺服器程序數目還高。
在 event
中,如果由 MaxRequestWorkers
和 ThreadsPerChild
設定所定義的程序數目,外加正常關閉的程序數目,比 16 個伺服器程序 (預設值) 還多時,請增加此指令。
伺服器中編譯了 ServerLimit 20000
的硬限制 (對於 prefork
MPM 為 200000)。這項限制的目的是要避免因為錯字而產生的不良影響。要進一步增加到超出此限制,您將需要修改 mpm 原始程式碼檔案中的 MAX_SERVER_LIMIT 值,並重建伺服器。
說明 | 啟動時建立的子伺服器程序數量 |
---|---|
語法 | StartServers 數字 |
預設值 | 請參閱用法以查看詳細資料 |
內容 | 伺服器設定 |
狀態 | MPM |
模組 | event , worker , prefork , mpmt_os2 |
StartServers
指令設定在啟動時建立之之子伺服器處理序數量。由於處理序數量會依照負荷動態控制(請參閱 MinSpareThreads
、MaxSpareThreads
、MinSpareServers
、MaxSpareServers
),通常幾乎沒有調整此參數的理由。
預設值因 MPM 而異。 worker
和 event
的預設值為 StartServers 3
; prefork
的預設值為 5
; mpmt_os2
的預設值為 2
。
說明 | 啟動時建立的執行緒數量 |
---|---|
語法 | StartThreads 數量 |
預設值 | 請參閱用法以查看詳細資料 |
內容 | 伺服器設定 |
狀態 | MPM |
模組 | mpm_netware |
啟動時建立的執行緒數量。由於執行緒數量會依照負荷動態控制(請參閱 MinSpareThreads
、MaxSpareThreads
、MinSpareServers
、MaxSpareServers
),通常幾乎沒有調整此參數的理由。
在 mpm_netware
中,預設值為 StartThreads 50
,而且由於只有一個處理序,因此這是啟動時建立的執行緒的總數量,用於處理要求。
說明 | 設定每個子處理序的執行緒可配置數量上限 |
---|---|
語法 | ThreadLimit 數量 |
預設值 | 請參閱用法以查看詳細資料 |
內容 | 伺服器設定 |
狀態 | MPM |
模組 | event 、worker 、mpm_winnt |
此指令設定 ThreadsPerChild
的最大設定值,適用於 Apache httpd 處理序的運行期間。重新啟動期間修改此指令的所有嘗試都會被略過,但可以在重新啟動期間修改 ThreadsPerChild
,最多到此指令的值。
使用此指令時必須特別小心。如果 ThreadLimit
設定為遠大於 ThreadsPerChild
的值,將會配置多餘的未使用的共用記憶體。如果 ThreadLimit
和 ThreadsPerChild
都設定為高於系統可處理的值,Apache httpd 可能無法啟動,或是系統可能不穩定。將此指令的值設定為目前的 Apache httpd 執行對於 ThreadsPerChild
最高預測設定值,不要再高。
與 mpm_winnt
一起使用時,ThreadLimit
的預設值為 1920
,與其他部分一起使用時,預設值則為 64
。
說明 | 每個子程序建立的執行緒數目 |
---|---|
語法 | ThreadsPerChild number |
預設值 | 請參閱用法以查看詳細資料 |
內容 | 伺服器設定 |
狀態 | MPM |
模組 | event 、worker 、mpm_winnt |
這個指令設定每個子程序建立的執行緒數目。子程序在啟動時建立這些執行緒,而且永遠不會建立更多執行緒。如果使用 MPM 例如 mpm_winnt
,其中只有一個子程序,則這個數字應高於足夠處理伺服器整體負載的數字。如果使用 MPM 例如 worker
,其中有多個子程序,則執行緒的總數量必須高於足夠處理伺服器一般負載的數量。
搭配 mpm_winnt
使用時,ThreadsPerChild
的預設值為 64
;搭配其他時使用則為 25
。
ThreadsPerChild
的值不能超過 ThreadLimit
的值。如果設定的值較高,系統啟動時會自動降低值,並記錄警告。這兩個指令之間的關係在 ThreadLimit
解釋。
說明 | 處理用戶端連線的執行緒使用的堆疊大小 (以位元組為單位) |
---|---|
語法 | ThreadStackSize size |
預設值 | NetWare 上為 65536;其他作業系統有所不同 |
內容 | 伺服器設定 |
狀態 | MPM |
模組 | event 、worker 、mpm_winnt 、mpm_netware 、mpmt_os2 |
相容性 | 在 Apache HTTP Server 2.1 和更新版本中提供 |
ThreadStackSize
指令設定處理用戶端連線並呼叫模組協助處理這些連線的執行緒 (針對自動資料) 的堆疊大小。在多數情況下,作業系統預設的堆疊大小是合理的,但有些情況下可能需要調整
ThreadStackSize
高於作業系統預設值來解決。此類調整僅在第三方模組的供應商指定為必要時,或當 Apache httpd 當機的診斷指出執行緒堆疊大小過小時才需要。ThreadStackSize
設定為低於作業系統預設值,則每個子處理序中的執行緒數將可達成較高的數量。此類調整應僅在允許執行網站伺服器完整處理程序的測試環境中進行,因為可能會出現需要更多堆疊來處理的罕見要求。所需的最小堆疊大小在很大程度上取決於所使用的模組,但網站伺服器設定中的任何變更都可能會使目前的 ThreadStackSize
設定失效。ulimit -s
的(通常較大)軟性限制(如無限制則為 8MB)當作預設堆疊大小。ThreadStackSize
,除非需要每個子處理序中的高數量執行緒。在某些平台(包括 Linux)上,128000 的設定已經太低,且會造成某一些常見模組當機。