欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

<-
Apache > HTTP Server > 文檔 > 版本2.2 > 模塊
   致謝 | 譯者聲明 | 本篇譯者:金步國 | 本篇譯稿最后更新:2006年1月22日 | 獲取最新版本

Apache MPM 公共指令

說明收集了被多個多路處理模塊(MPM)實現(xiàn)的公共指令
狀態(tài)MPM
top

AcceptMutex 指令

說明Apache用于串行化多個子進程在(多個)網(wǎng)絡套接字(socket)上接受請求的方法
語法AcceptMutex Default|method
默認值AcceptMutex Default
作用域server config
狀態(tài)MPM
模塊prefork, worker

AcceptMutex指令用于設置串行化多個子進程在(多個)網(wǎng)絡套接字上接受請求的方法。在2.0版本以前,只能在編譯時設定此方法。應當在這里使用的最佳方法取決于不同的硬件體系結構和操作系統(tǒng)。欲知詳情,請參見性能調(diào)節(jié)文檔。

如果設置為Default ,那么將會使用編譯時自動選擇的默認值。其他可用的方法在下面列出。注意,并不是所有的方法在所有的平臺上都是可用的,如果指定了一個不可用的方法,將會在錯誤日志中記錄下這個不可用的方法。

flock
這種方法調(diào)用系統(tǒng)函數(shù)flock(2)來鎖定一個加鎖文件(其位置取決于LockFile指令)。
fcntl
這種方法調(diào)用系統(tǒng)函數(shù)fcntl(2)來鎖定一個加鎖文件(其位置取決于LockFile指令)。
posixsem
(2.0及更新版本)這種方法使用了POSIX信號燈。如果一個運行中的線程占有了互斥segfault ,則信號燈的所有者將不會被恢復,從而導致服務器的掛起和失去響應。
pthread
(1.3及更新版本)這種方法使用了POSIX互斥,按理應該可以用于所有完整實現(xiàn)了POSIX線程規(guī)范的體系中,但是似乎只能用在Solaris2.5及更新版本中,甚至只能在某種配置下才正常運作。如果遇到這種情況,則應該提防服務器的掛起和失去響應。只提供靜態(tài)內(nèi)容的服務器可能不受影響。
sysvsem
(1.3及更新版本)這種方案使用SysV風格的信號燈以實現(xiàn)互斥。不幸的是,SysV風格的信號燈有一些副作用,其一是,Apache有可能不能在結束以前釋放這種信號燈(見ipcs()的man page),另外,這種信號燈API給與網(wǎng)絡服務器有相同uid的CGI提供了拒絕服務攻擊的機會(所有CGI,除非用了類似suexeccgiwrapper)。鑒于此,在多數(shù)體系中都不用這種方法,除了IRIX(因為加鎖文件的方法在IRIX中代價太高)。

如果你想知道編譯時自動選擇的默認值,你可以將LogLevel設為debug ,這樣默認的AcceptMutex就會記錄到ErrorLog中。

警告

在大多數(shù)系統(tǒng)上,使用pthread時,如果一個子進程在持有AcceptCntl互斥信號時異常中止,服務器將會掛起和失去響應,此時必須手動重啟服務器才能解決問題。但Solaris是一個例外,因為它提供了一個機制(Apache利用了該機制),允許在一個持有互斥信號的子進程異常中止后恢復互斥信號。

如果你的操作系統(tǒng)實現(xiàn)了pthread_mutexattr_setrobust_np()函數(shù),基本上就能安全的使用pthread選項。

top

CoreDumpDirectory 指令

說明Apache使用的內(nèi)核轉儲目錄
語法CoreDumpDirectory directory
默認值參見說明
作用域server config
狀態(tài)MPM
模塊beos, mpm_winnt, prefork, worker

這個指令用于控制Apache使用的內(nèi)核轉儲目錄。默認位于ServerRoot下,因為這個目錄通常對于運行服務器的用戶是不可寫的,內(nèi)核轉儲一般也就不會寫入內(nèi)容。如果你在調(diào)試中需要內(nèi)核轉儲,你可以用這個指令來指定另外一個目錄。

Linux上的內(nèi)核轉儲

如果Apache以root身份啟動并切換至其他用戶,即使指定的轉儲目錄對進程是可寫的,Linux內(nèi)核也將禁止Apache進行內(nèi)核轉儲。但是Apache2.0.46及以后的版本在你明確指定CoreDumpDirectory的情況下,能夠在Linux2.4以上的版本中強制實現(xiàn)內(nèi)核轉儲。

top

EnableExceptionHook 指令

說明在子進程崩潰以后啟用一個鉤子來運行異常處理程序
語法EnableExceptionHook On|Off
默認值EnableExceptionHook Off
作用域server config
狀態(tài)MPM
模塊prefork, worker
兼容性僅在 Apache 2.0.49 及以后的版本中可用

因為安全原因,這個指令僅在編譯時使用了 --enable-exception-hook 選項的情況下才可用。它會在一個子進程崩潰以后啟用一個鉤子(hook)來運行一個外部模塊以做些后繼處理。

目前有兩個模塊(mod_whatkilledusmod_backtrace)可以被鉤子使用。請參見Jeff Trawick的EnableExceptionHook site以獲得更多信息。

top

GracefulShutdownTimeout 指令

說明指定優(yōu)雅停止服務器的超時秒數(shù)
語法GracefulShutDownTimeout seconds
默認值GracefulShutDownTimeout 0
作用域server config
狀態(tài)MPM
模塊prefork, worker, event
兼容性僅在 Apache 2.2 及以后的版本中可用

GracefulShutdownTimeout設置服務器在收到"優(yōu)雅停止"信號后最多允許使用多少秒來處理尚未完成的連接,超時后服務器將強行退出。

設為"0"表示永不超時,也就是服務器必須在處理完所有尚未完成的請求之后才能退出。

top

Group 指令

說明對請求提供服務的Apache子進程運行時的用戶組
語法Group unix-group
默認值Group #-1
作用域server config
狀態(tài)MPM
模塊beos, mpmt_os2, prefork, worker
兼容性Apache2.0以后只對全局配置有效

Group指令指定了用于對客戶端請求提供服務的Apache子進程運行時的用戶組。為了使用這個指令,Apache必須以root初始化啟動,否則在切換用戶組時會失敗,并繼續(xù)以初始化啟動時的用戶組運行。Unix-group可以是下列之一:

用戶組的名稱
通過名稱引用組。
"#"號后跟一個組編號(GID)
通過編號引用組。

示例

Group www-group

建議你專門為Apache服務器新建一個用戶組。一些管理員使用nobody用戶,但是這并非總是可用或是合適的。

安全

不要將Group(或User)設置成root ,除非你明確知道自己在做什么,并且明白其風險所在。

特別提示:在<VirtualHost>段中使用該指令已經(jīng)不再被支持了。你可以使用suexecSuexecUserGroup指令來達到這個目的。

注意

雖然Group指令也存在于beosmpmt_os2MPM中,但是事實上沒用任何用處,只不過是個擺飾罷了。

top

Listen 指令

說明服務器監(jiān)聽的IP地址和端口
語法Listen [IP-address:]portnumber [protocol]
作用域server config
狀態(tài)MPM
模塊beos, mpm_netware, mpm_winnt, mpmt_os2, prefork, worker, event
兼容性Apache2.0以后必須設置該指令,protocol參數(shù)僅在2.1.5及以后版本中可用

Listen指令指示Apache只在指定的IP地址和端口上監(jiān)聽;默認情況下Apache會在所有IP地址上監(jiān)聽。Listen是一個必須設置的指令。如果在配置文件中找不到這個指令,服務器將無法啟動。這和先前的版本不一樣。

Listen指令指定服務器在那個端口或地址和端口的組合上監(jiān)聽接入請求。如果只指定一個端口,服務器將在所有地址上監(jiān)聽該端口。如果指定了地址和端口的組合,服務器將在指定地址的指定端口上監(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

可選的protocol參數(shù)在大多數(shù)情況下并不需要。若未指定該參數(shù),則將為443端口使用默認的https協(xié)議,為其它端口使用http協(xié)議。在這里指定協(xié)議是為了確定使用哪個模塊來處理請求,以及根據(jù)AcceptFilter指令根據(jù)不同的協(xié)議有針對性的進行優(yōu)化。

僅在使用非標準端口時才需要指定protocol參數(shù)。比如在8443端口運行https協(xié)議:

Listen 192.170.2.1:8443 https

錯誤條件

多個Listen指令指定了同一個地址和端口的組合后,會導致"Address already in use"錯誤。

參見

top

ListenBackLog 指令

說明半鏈接(pending connection)隊列的最大長度
語法ListenBacklog backlog
默認值ListenBacklog 511
作用域server config
狀態(tài)MPM
模塊beos, mpm_netware, mpm_winnt, mpmt_os2, prefork, worker

半鏈接(pending connection)隊列的最大長度。一般不需要調(diào)整此項參數(shù),然而在一些系統(tǒng)上,必須增大此值以抵御TCP SYN 洪水攻擊。參見操作系統(tǒng)的listen(2)系統(tǒng)調(diào)用的后備參數(shù)。

操作系統(tǒng)常常將此值限制為一個較小的數(shù)字,具體根據(jù)操作系統(tǒng)的不同而不同。需要注意的是,許多操作系統(tǒng)并不是正好使用后備數(shù)值,而是取決于設置的值(通常大于后備值)。

top

LockFile 指令

說明接受串行鎖文件的位置
語法LockFile filename
默認值LockFile logs/accept.lock
作用域server config
狀態(tài)MPM
模塊prefork, worker

LockFile指令設置當AcceptMutex指令的值是fcntlflock的時候,Apache使用的鎖文件的位置。該指令通常保持它的默認值。改變默認值的主要原因是logs目錄位于一個NFS文件系統(tǒng)上,因為鎖文件必須位于本地磁盤上。主服務器進程的PID會自動添加到文件名后面。

安全

最好不要將此文件放在任何人都可以具有寫權限的目錄(比如/var/tmp)中,因為別人可以通過建立一個與服務器企圖建立的鎖文件同名的文件,來阻止服務器啟動,從而造成一個拒絕服務攻擊。

參見

top

MaxClients 指令

說明允許同時伺服的最大接入請求數(shù)量
語法MaxClients number
默認值參見下面的說明
作用域server config
狀態(tài)MPM
模塊beos, prefork, worker

MaxClients指令設置了允許同時伺服的最大接入請求數(shù)量。任何超過MaxClients限制的請求都將進入等候隊列,直到達到ListenBacklog指令限制的最大值為止。一旦一個鏈接被釋放,隊列中的請求將得到服務。

對于非線程型的MPM(也就是prefork),MaxClients表示可以用于伺服客戶端請求的最大子進程數(shù)量,默認值是256。要增大這個值,你必須同時增大ServerLimit 。

對于線程型或者混合型的MPM(也就是beosworker),MaxClients表示可以用于伺服客戶端請求的最大線程數(shù)量。線程型的beos的默認值是50。對于混合型的MPM默認值是16(ServerLimit)乘以25(ThreadsPerChild)的結果。因此要將MaxClients增加到超過16個進程才能提供的時候,你必須同時增加ServerLimit的值。

top

MaxMemFree 指令

說明主內(nèi)存分配程序在未調(diào)用free()的情況下允許持有的最大自由內(nèi)存數(shù)量(KB)
語法MaxMemFree KBytes
默認值MaxMemFree 0
作用域server config
狀態(tài)MPM
模塊beos, mpm_netware, prefork, worker, mpm_winnt

MaxMemFree指令用于設置主內(nèi)存分配程序在未調(diào)用free()的情況下允許持有的最大自由內(nèi)存數(shù)量(KB)。若未設置或設置為"0",將表示無限制。

top

MaxRequestsPerChild 指令

說明每個子進程在其生存期內(nèi)允許伺服的最大請求數(shù)量
語法MaxRequestsPerChild number
默認值MaxRequestsPerChild 10000
作用域server config
狀態(tài)MPM
模塊mpm_netware, mpm_winnt, mpmt_os2, prefork, worker

MaxRequestsPerChild指令設置每個子進程在其生存期內(nèi)允許伺服的最大請求數(shù)量。到達MaxRequestsPerChild的限制后,子進程將會結束。如果MaxRequestsPerChild為"0",子進程將永遠不會結束。

不同的默認值

mpm_netwarempm_winnt上的默認值是"0"。

MaxRequestsPerChild設置成非零值有兩個好處:

注意

對于KeepAlive鏈接,只有第一個請求會被計數(shù)。事實上,它改變了每個子進程限制最大鏈接數(shù)量的行為。

top

MaxSpareThreads 指令

說明最大空閑線程數(shù)
語法MaxSpareThreads number
默認值參見下面的說明
作用域server config
狀態(tài)MPM
模塊beos, mpm_netware, mpmt_os2, worker

設置最大空閑線程數(shù)。不同的MPM對這個指令的處理是不一樣的:

worker的默認值是"250"。這個MPM將基于整個服務器監(jiān)視空閑線程數(shù)。如果服務器中總的空閑線程數(shù)太多,子進程將殺死多余的空閑線程。

mpm_netware的默認值是"100"。既然這個MPM只運行單獨一個子進程,此MPM當然亦基于整個服務器監(jiān)視空閑線程數(shù)。

beosmpmt_os2的工作方式與mpm_netware差不多,beos的默認值是"50";mpmt_os2的默認值是"10"。

限制

MaxSpareThreads的取值范圍是有限制的。Apache將按照如下限制自動修正你設置的值:

參見

top

MinSpareThreads 指令

說明最小空閑線程數(shù)
語法MinSpareThreads number
默認值參見下面的說明
作用域server config
狀態(tài)MPM
模塊beos, mpm_netware, mpmt_os2, worker

設置最小空閑線程數(shù),用于處理可能到來的突發(fā)請求。不同的MPM對這個指令的處理是不一樣的:

worker的默認值是"75"。這個MPM將基于整個服務器監(jiān)視空閑線程數(shù)。如果服務器中總的空閑線程數(shù)太少,子進程將產(chǎn)生新的空閑線程。

mpm_netware的默認值是"10"。既然這個MPM只運行單獨一個子進程,此MPM當然亦基于整個服務器監(jiān)視空閑線程數(shù)。

beosmpmt_os2的工作方式與mpm_netware差不多,beos的默認值是"1";mpmt_os2的默認值是"5"。

參見

top

PidFile 指令

說明服務器用于記錄父進程(監(jiān)控進程)PID的文件
語法PidFile filename
默認值PidFile logs/httpd.pid
作用域server config
狀態(tài)MPM
模塊beos, mpm_winnt, mpmt_os2, prefork, worker

PidFile指令設置服務器用于記錄父進程(監(jiān)控進程)PID的文件。如果指定的不是絕對路徑,那么將視為基于ServerRoot的相對路徑。

示例

PidFile /var/run/apache.pid

這個文件通常用來便于給服務器父進程發(fā)送一個信號,用于關閉或重啟服務器,以重新打開ErrorLogTransferLog文件、重新讀取配置文件。這些可以通過發(fā)送一個"SIGHUP"(kill -1)信號到PidFile記錄的進程PID。

PidFile和其他日志文件一樣要注意放置位置和安全問題。

注意

從Apache2開始,推薦使用apachectl腳本來啟動或停止服務器。

top

ReceiveBufferSize 指令

說明TCP接收緩沖區(qū)大小(字節(jié))
語法ReceiveBufferSize bytes
默認值ReceiveBufferSize 0
作用域server config
狀態(tài)MPM
模塊beos, mpm_netware, mpm_winnt, mpmt_os2, prefork, worker

這個指令設置服務器的TCP接收緩沖區(qū)的大小(字節(jié))。提高這個值會導致兩個后果:高速度和高潛伏時間(100ms左右)。

如果設置為"0",將使用操作系統(tǒng)默認值。

top

ScoreBoardFile 指令

說明存儲子進程協(xié)調(diào)數(shù)據(jù)(coordination data)的文件
語法ScoreBoardFile file-path
默認值ScoreBoardFile logs/apache_status
作用域server config
狀態(tài)MPM
模塊beos, mpm_winnt, prefork, worker

Apache使用記分板(scoreboard)在父進程和子進程之間進行通信。一些體系結構要求有一個文件來幫助通信。如果未指定這個文件,Apache會首先嘗試在匿名共享內(nèi)存中建立完整的記分板(scoreboard),若失敗,將繼續(xù)嘗試使用基于文件的共享存儲器在磁盤上建立這個文件。若利用這個指令指定這個文件的位置,則Apache將總是在磁盤上建立這個文件。

示例

ScoreBoardFile /var/run/apache_status

基于文件的共享存儲器對于使用直接訪問記分板(scoreboard)的第三方程序是很有用的。

ScoreBoardFile放置在RAM disk中會對速度提升有很大幫助。但是同其他日志文件一樣也要注意放置位置和安全問題。

參見

top

SendBufferSize 指令

說明TCP發(fā)送緩沖區(qū)大小(字節(jié))
語法SendBufferSize bytes
默認值SendBufferSize 0
作用域server config
狀態(tài)MPM
模塊beos, mpm_netware, mpm_winnt, mpmt_os2, prefork, worker

這個指令設置服務器的TCP發(fā)送緩沖區(qū)的大小(字節(jié))。提高這個值會導致兩個后果:高速度和高潛伏時間(100ms左右)。

如果設置為"0",將使用操作系統(tǒng)默認值。

top

ServerLimit 指令

說明服務器允許配置的進程數(shù)上限
語法ServerLimit number
默認值參見下面的說明
作用域server config
狀態(tài)MPM
模塊prefork, worker

對于preforkMPM,這個指令設置了MaxClients最大允許配置的數(shù)值。對于workerMPM,這個指令和ThreadLimit結合使用設置了MaxClients最大允許配置的數(shù)值。任何在重啟期間對這個指令的改變都將被忽略,但對MaxClients的修改卻會生效。

使用這個指令時要特別當心。如果將ServerLimit設置成一個高出實際需要許多的值,將會有過多的共享內(nèi)存被分配。如果將ServerLimitMaxClients設置成超過系統(tǒng)的處理能力,Apache可能無法啟動,或者系統(tǒng)將變得不穩(wěn)定。

對于preforkMPM,只有在你需要將MaxClients設置成高于默認值256的時候才需要使用這個指令。要將此指令的值保持和MaxClients一樣。

對于workerMPM,只有在你需要將MaxClientsThreadsPerChild設置成需要超過默認值16個子進程的時候才需要使用這個指令。不要將該指令的值設置的比MaxClients ThreadsPerChild需要的子進程數(shù)量高。

注意

Apache在編譯時內(nèi)部有一個硬限制"ServerLimit 20000"(對于preforkMPM為"ServerLimit 200000")。你不能超越這個限制。

參見

top

StartServers 指令

說明服務器啟動時建立的子進程數(shù)
語法StartServers number
默認值參見下面的說明
作用域server config
狀態(tài)MPM
模塊mpmt_os2, prefork, worker

StartServers指令設置了服務器啟動時建立的子進程數(shù)量。因為子進程數(shù)量動態(tài)的取決于負載的輕重,所有一般沒有必要調(diào)整這個參數(shù)。

不同的MPM默認值也不一樣。對于worker默認值是"3"。對于prefork默認值是"5",mpmt_os2是"2"。

top

StartThreads 指令

說明服務器啟動時建立的線程數(shù)
語法StartThreads number
默認值參見下面的說明
作用域server config
狀態(tài)MPM
模塊beos, mpm_netware

設置了服務器啟動時建立的線程數(shù)量。因為線程數(shù)量動態(tài)的取決于負載的輕重,所有一般沒有必要調(diào)整這個參數(shù)。

對于mpm_netware ,默認值是"50",由于只有一個進程,因此所有的線程都將用于伺服請求。

對于beos ,默認值是"10",同樣也是所有的線程都將用于伺服請求。

top

ThreadLimit 指令

說明每個子進程可配置的線程數(shù)上限
語法ThreadLimit number
默認值參見下面的說明
作用域server config
狀態(tài)MPM
模塊mpm_winnt, worker
兼容性僅用于2.0.41及以后版本的mpm_winnt

這個指令設置了每個子進程可配置的線程數(shù)ThreadsPerChild上限。任何在重啟期間對這個指令的改變都將被忽略,但對ThreadsPerChild的修改卻會生效。

使用這個指令時要特別當心。如果將ThreadLimit設置成一個高出ThreadsPerChild實際需要很多的值,將會有過多的共享內(nèi)存被分配。如果將ThreadLimitThreadsPerChild設置成超過系統(tǒng)的處理能力,Apache可能無法啟動,或者系統(tǒng)將變得不穩(wěn)定。該指令的值應當和ThreadsPerChild可能達到的最大值保持一致。

對于mpm_winnt,ThreadLimit的默認值是1920;對于其他MPM這個值是64。

注意

Apache在編譯時內(nèi)部有一個硬性的限制"ThreadLimit 20000"(對于mpm_winnt是"ThreadLimit 15000"),你不能超越這個限制。

top

ThreadsPerChild 指令

說明每個子進程建立的線程數(shù)
語法ThreadsPerChild number
默認值參見下面的說明
作用域server config
狀態(tài)MPM
模塊mpm_winnt, worker

這個指令設置了每個子進程建立的線程數(shù)。子進程在啟動時建立這些線程后就不再建立新的線程了。如果使用一個類似于mpm_winnt只有一個子進程的MPM,這個數(shù)值要足夠大,以便可以處理可能的請求高峰。如果使用一個類似于worker有多個子進程的MPM,每個子進程所擁有的所有線程的總數(shù)要足夠大,以便可以處理可能的請求高峰。

對于mpm_winnt,ThreadsPerChild的默認值是64;對于其他MPM是25。

top

ThreadStackSize 指令

說明處理客戶端連接的線程使用的棧尺寸(字節(jié))
語法ThreadStackSize size
默認值NetWare上為65536;其它平臺上等于操作系統(tǒng)默認值
作用域server config
狀態(tài)MPM
模塊mpm_netware, mpm_winnt, worker
兼容性僅在 Apache 2.1 及以后的版本中可用

ThreadStackSize指令設置了處理客戶端連接(包括調(diào)用模塊以協(xié)助處理)的線程允許使用的最大棧尺寸(字節(jié))。在大多數(shù)情況下,操作系統(tǒng)默認的棧尺寸很合理,但是在某些情況下,需要調(diào)整這個值:

top

User 指令

說明實際服務于請求的子進程運行時的用戶
語法User unix-userid
默認值User #-1
作用域server config
狀態(tài)MPM
模塊prefork, worker
兼容性2.0版本起僅在全局服務器配置中可用

User指令用于設置實際提供服務的子進程的用戶。為了使用這個指令,服務器必須以root身份啟動和初始化。如果你以非root身份啟動服務器,子進程將不能夠切換至非特權用戶,并繼續(xù)以啟動服務器的原始用戶身份運行。如果確實以root用戶啟動了服務器,那么父進程將仍然以root身份運行。Unix-userid是下列值之一:

一個用戶名
通過用戶名引用用戶
"#"號后面跟一個用戶編號
通過用戶編號引用用戶

用于運行子進程的用戶必須是一個沒有特權的用戶,這樣才能保證子進程無權訪問那些不想為外界所知的文件,同樣的,該用戶亦需沒有執(zhí)行那些不應當被外界執(zhí)行的程序的權限。強烈推薦你專門為Apache子進程建立一個單獨的用戶和組。一些管理員使用nobody用戶,但是這并不能總是符合要求,因為可能有其他程序也在使用這個用戶。

安全

不要將User(或Group)設置成root ,除非你明確知道自己在做什么,并且明白其風險所在。

特別提示:在<VirtualHost>段中使用該指令已經(jīng)不再被支持了。你可以使用suexecSuexecUserGroup指令來達到這個目的。

注意

雖然User指令也存在于beosmpmt_os2MPM中,但是事實上沒用任何用處,只不過是個擺飾罷了。