說明 | Apache用于串行化多個子進(jìn)程在(多個)網(wǎng)絡(luò)套接字(socket)上接受請求的方法 |
---|---|
語法 | AcceptMutex Default|method |
默認(rèn)值 | AcceptMutex Default |
作用域 | server config |
狀態(tài) | MPM |
模塊 | prefork , worker |
AcceptMutex
指令用于設(shè)置串行化多個子進(jìn)程在(多個)網(wǎng)絡(luò)套接字上接受請求的方法。在2.0版本以前,只能在編譯時設(shè)定此方法。應(yīng)當(dāng)在這里使用的最佳方法取決于不同的硬件體系結(jié)構(gòu)和操作系統(tǒng)。欲知詳情,請參見性能調(diào)節(jié)文檔。
如果設(shè)置為Default
,那么將會使用編譯時自動選擇的默認(rèn)值。其他可用的方法在下面列出。注意,并不是所有的方法在所有的平臺上都是可用的,如果指定了一個不可用的方法,將會在錯誤日志中記錄下這個不可用的方法。
flock
flock(2)
來鎖定一個加鎖文件(其位置取決于LockFile
指令)。fcntl
fcntl(2)
來鎖定一個加鎖文件(其位置取決于LockFile
指令)。posixsem
pthread
sysvsem
ipcs()
的man page),另外,這種信號燈API給與網(wǎng)絡(luò)服務(wù)器有相同uid的CGI提供了拒絕服務(wù)攻擊的機(jī)會(所有CGI,除非用了類似suexec
或cgiwrapper
)。鑒于此,在多數(shù)體系中都不用這種方法,除了IRIX(因?yàn)榧渔i文件的方法在IRIX中代價太高)。如果你想知道編譯時自動選擇的默認(rèn)值,你可以將LogLevel
設(shè)為debug
,這樣默認(rèn)的AcceptMutex
就會記錄到ErrorLog
中。
在大多數(shù)系統(tǒng)上,使用pthread
時,如果一個子進(jìn)程在持有AcceptCntl
互斥信號時異常中止,服務(wù)器將會掛起和失去響應(yīng),此時必須手動重啟服務(wù)器才能解決問題。但Solaris是一個例外,因?yàn)樗峁┝艘粋€機(jī)制(Apache利用了該機(jī)制),允許在一個持有互斥信號的子進(jìn)程異常中止后恢復(fù)互斥信號。
如果你的操作系統(tǒng)實(shí)現(xiàn)了pthread_mutexattr_setrobust_np()
函數(shù),基本上就能安全的使用pthread
選項。譯者注:Solaris實(shí)現(xiàn)了此函數(shù),Linux卻沒有實(shí)現(xiàn)。
說明 | Apache使用的內(nèi)核轉(zhuǎn)儲目錄 |
---|---|
語法 | CoreDumpDirectory directory |
默認(rèn)值 | 參見說明 |
作用域 | server config |
狀態(tài) | MPM |
模塊 | beos , mpm_winnt , prefork , worker |
這個指令用于控制Apache使用的內(nèi)核轉(zhuǎn)儲目錄。默認(rèn)位于ServerRoot
下,因?yàn)檫@個目錄通常對于運(yùn)行服務(wù)器的用戶是不可寫的,內(nèi)核轉(zhuǎn)儲一般也就不會寫入內(nèi)容。如果你在調(diào)試中需要內(nèi)核轉(zhuǎn)儲,你可以用這個指令來指定另外一個目錄。
如果Apache以root身份啟動并切換至其他用戶,即使指定的轉(zhuǎn)儲目錄對進(jìn)程是可寫的,Linux內(nèi)核也將禁止Apache進(jìn)行內(nèi)核轉(zhuǎn)儲。但是Apache2.0.46及以后的版本在你明確指定CoreDumpDirectory
的情況下,能夠在Linux2.4以上的版本中強(qiáng)制實(shí)現(xiàn)內(nèi)核轉(zhuǎn)儲。
說明 | 在子進(jìn)程崩潰以后啟用一個鉤子來運(yùn)行異常處理程序 |
---|---|
語法 | EnableExceptionHook On|Off |
默認(rèn)值 | EnableExceptionHook Off |
作用域 | server config |
狀態(tài) | MPM |
模塊 | prefork , worker |
兼容性 | 僅在 Apache 2.0.49 及以后的版本中可用 |
因?yàn)榘踩颍@個指令僅在編譯時使用了 --enable-exception-hook
選項的情況下才可用。它會在一個子進(jìn)程崩潰以后啟用一個鉤子(hook)來運(yùn)行一個外部模塊以做些后繼處理。
目前有兩個模塊(mod_whatkilledus
和mod_backtrace
)可以被鉤子使用。請參見Jeff Trawick的EnableExceptionHook site以獲得更多信息。
說明 | 指定優(yōu)雅停止服務(wù)器的超時秒數(shù) |
---|---|
語法 | GracefulShutDownTimeout seconds |
默認(rèn)值 | GracefulShutDownTimeout 0 |
作用域 | server config |
狀態(tài) | MPM |
模塊 | prefork , worker , event |
兼容性 | 僅在 Apache 2.2 及以后的版本中可用 |
GracefulShutdownTimeout
設(shè)置服務(wù)器在收到"優(yōu)雅停止"信號后最多允許使用多少秒來處理尚未完成的連接,超時后服務(wù)器將強(qiáng)行退出。
設(shè)為"0"表示永不超時,也就是服務(wù)器必須在處理完所有尚未完成的請求之后才能退出。
說明 | 對請求提供服務(wù)的Apache子進(jìn)程運(yùn)行時的用戶組 |
---|---|
語法 | Group unix-group |
默認(rèn)值 | Group #-1 |
作用域 | server config |
狀態(tài) | MPM |
模塊 | beos , mpmt_os2 , prefork , worker |
兼容性 | Apache2.0以后只對全局配置有效 |
Group
指令指定了用于對客戶端請求提供服務(wù)的Apache子進(jìn)程運(yùn)行時的用戶組。為了使用這個指令,Apache必須以root
初始化啟動,否則在切換用戶組時會失敗,并繼續(xù)以初始化啟動時的用戶組運(yùn)行。Unix-group可以是下列之一:
#
"號后跟一個組編號(GID)Group www-group
建議你專門為Apache服務(wù)器新建一個用戶組。一些管理員使用nobody
用戶,但是這并非總是可用或是合適的。
不要將Group
(或User
)設(shè)置成root
,除非你明確知道自己在做什么,并且明白其風(fēng)險所在。
特別提示:在<VirtualHost>
段中使用該指令已經(jīng)不再被支持了。你可以使用suexec
的SuexecUserGroup
指令來達(dá)到這個目的。
說明 | 服務(wù)器監(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以后必須設(shè)置該指令,protocol參數(shù)僅在2.1.5及以后版本中可用 |
Listen
指令指示Apache只在指定的IP地址和端口上監(jiān)聽;默認(rèn)情況下Apache會在所有IP地址上監(jiān)聽。Listen
是一個必須設(shè)置的指令。如果在配置文件中找不到這個指令,服務(wù)器將無法啟動。這和先前的版本不一樣。
Listen
指令指定服務(wù)器在那個端口或地址和端口的組合上監(jiān)聽接入請求。如果只指定一個端口,服務(wù)器將在所有地址上監(jiān)聽該端口。如果指定了地址和端口的組合,服務(wù)器將在指定地址的指定端口上監(jiān)聽。
使用多個Listen
指令可以指定多個不同的監(jiān)聽端口和/或地址端口組合。服務(wù)器將會對列出的所有端口和地址端口組合上的請求作出應(yīng)答。
例如,想要服務(wù)器接受80和8000端口上的請求,可以這樣設(shè)置:
Listen 80
Listen 8000
為了讓服務(wù)器在兩個確定的地址端口組合上接受請求,可以這樣設(shè)置:
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端口使用默認(rèn)的https
協(xié)議,為其它端口使用http
協(xié)議。在這里指定協(xié)議是為了確定使用哪個模塊來處理請求,以及根據(jù)AcceptFilter
指令根據(jù)不同的協(xié)議有針對性的進(jìn)行優(yōu)化。
僅在使用非標(biāo)準(zhǔn)端口時才需要指定protocol參數(shù)。比如在8443端口運(yùn)行https
協(xié)議:
Listen 192.170.2.1:8443 https
Listen
指令指定了同一個地址和端口的組合后,會導(dǎo)致"Address already in use
"錯誤。說明 | 半鏈接(pending connection)隊列的最大長度 |
---|---|
語法 | ListenBacklog backlog |
默認(rèn)值 | 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ù)值,而是取決于設(shè)置的值(通常大于后備值)。
說明 | 接受串行鎖文件的位置 |
---|---|
語法 | LockFile filename |
默認(rèn)值 | LockFile logs/accept.lock |
作用域 | server config |
狀態(tài) | MPM |
模塊 | prefork , worker |
LockFile
指令設(shè)置當(dāng)AcceptMutex
指令的值是fcntl
或flock
的時候,Apache使用的鎖文件的位置。該指令通常保持它的默認(rèn)值。改變默認(rèn)值的主要原因是logs
目錄位于一個NFS文件系統(tǒng)上,因?yàn)殒i文件必須位于本地磁盤上。主服務(wù)器進(jìn)程的PID會自動添加到文件名后面。
最好不要將此文件放在任何人都可以具有寫權(quán)限的目錄(比如/var/tmp
)中,因?yàn)閯e人可以通過建立一個與服務(wù)器企圖建立的鎖文件同名的文件,來阻止服務(wù)器啟動,從而造成一個拒絕服務(wù)攻擊。
說明 | 允許同時伺服的最大接入請求數(shù)量 |
---|---|
語法 | MaxClients number |
默認(rèn)值 | 參見下面的說明 |
作用域 | server config |
狀態(tài) | MPM |
模塊 | beos , prefork , worker |
MaxClients
指令設(shè)置了允許同時伺服的最大接入請求數(shù)量。任何超過MaxClients
限制的請求都將進(jìn)入等候隊列,直到達(dá)到ListenBacklog
指令限制的最大值為止。一旦一個鏈接被釋放,隊列中的請求將得到服務(wù)。
對于非線程型的MPM(也就是prefork
),MaxClients
表示可以用于伺服客戶端請求的最大子進(jìn)程數(shù)量,默認(rèn)值是256
。要增大這個值,你必須同時增大ServerLimit
。
對于線程型或者混合型的MPM(也就是beos
或worker
),MaxClients
表示可以用于伺服客戶端請求的最大線程數(shù)量。線程型的beos
的默認(rèn)值是50
。對于混合型的MPM默認(rèn)值是16
(ServerLimit
)乘以25
(ThreadsPerChild
)的結(jié)果。因此要將MaxClients
增加到超過16個進(jìn)程才能提供的時候,你必須同時增加ServerLimit
的值。
說明 | 主內(nèi)存分配程序在未調(diào)用free() 的情況下允許持有的最大自由內(nèi)存數(shù)量(KB) |
---|---|
語法 | MaxMemFree KBytes |
默認(rèn)值 | MaxMemFree 0 |
作用域 | server config |
狀態(tài) | MPM |
模塊 | beos , mpm_netware , prefork , worker , mpm_winnt |
MaxMemFree
指令用于設(shè)置主內(nèi)存分配程序在未調(diào)用free()
的情況下允許持有的最大自由內(nèi)存數(shù)量(KB)。若未設(shè)置或設(shè)置為"0",將表示無限制。
說明 | 每個子進(jìn)程在其生存期內(nèi)允許伺服的最大請求數(shù)量 |
---|---|
語法 | MaxRequestsPerChild number |
默認(rèn)值 | MaxRequestsPerChild 10000 |
作用域 | server config |
狀態(tài) | MPM |
模塊 | mpm_netware , mpm_winnt , mpmt_os2 , prefork , worker |
MaxRequestsPerChild
指令設(shè)置每個子進(jìn)程在其生存期內(nèi)允許伺服的最大請求數(shù)量。到達(dá)MaxRequestsPerChild
的限制后,子進(jìn)程將會結(jié)束。如果MaxRequestsPerChild
為"0
",子進(jìn)程將永遠(yuǎn)不會結(jié)束。
將MaxRequestsPerChild
設(shè)置成非零值有兩個好處:
對于KeepAlive
鏈接,只有第一個請求會被計數(shù)。事實(shí)上,它改變了每個子進(jìn)程限制最大鏈接數(shù)量的行為。
說明 | 最大空閑線程數(shù) |
---|---|
語法 | MaxSpareThreads number |
默認(rèn)值 | 參見下面的說明 |
作用域 | server config |
狀態(tài) | MPM |
模塊 | beos , mpm_netware , mpmt_os2 , worker |
設(shè)置最大空閑線程數(shù)。不同的MPM對這個指令的處理是不一樣的:
beos
和mpmt_os2
的工作方式與mpm_netware
差不多,限制
MaxSpareThreads
的取值范圍是有限制的。Apache將按照如下限制自動修正你設(shè)置的值:
mpm_netware
要求其小于等于MinSpareThreads
worker
要求其大于等于MinSpareThreads
加上ThreadsPerChild
的和參見
說明 | 最小空閑線程數(shù) |
---|---|
語法 | MinSpareThreads number |
默認(rèn)值 | 參見下面的說明 |
作用域 | server config |
狀態(tài) | MPM |
模塊 | beos , mpm_netware , mpmt_os2 , worker |
設(shè)置最小空閑線程數(shù),用于處理可能到來的突發(fā)請求。不同的MPM對這個指令的處理是不一樣的:
說明 | 服務(wù)器用于記錄父進(jìn)程(監(jiān)控進(jìn)程)PID的文件 |
---|---|
語法 | PidFile filename |
默認(rèn)值 | PidFile logs/httpd.pid |
作用域 | server config |
狀態(tài) | MPM |
模塊 | beos , mpm_winnt , mpmt_os2 , prefork , worker |
PidFile
指令設(shè)置服務(wù)器用于記錄父進(jìn)程(監(jiān)控進(jìn)程)PID的文件。如果指定的不是絕對路徑,那么將視為基于ServerRoot
的相對路徑。
PidFile /var/run/apache.pid
這個文件通常用來便于給服務(wù)器父進(jìn)程發(fā)送一個信號,用于關(guān)閉或重啟服務(wù)器,以重新打開ErrorLog
和PidFile
記錄的進(jìn)程PID。
PidFile
和其他日志文件一樣要注意放置位置和安全問題。
從Apache2開始,推薦使用apachectl
腳本來啟動或停止服務(wù)器。
說明 | TCP接收緩沖區(qū)大小(字節(jié)) |
---|---|
語法 | ReceiveBufferSize bytes |
默認(rèn)值 | ReceiveBufferSize 0 |
作用域 | server config |
狀態(tài) | MPM |
模塊 | beos , mpm_netware , mpm_winnt , mpmt_os2 , prefork , worker |
這個指令設(shè)置服務(wù)器的TCP接收緩沖區(qū)的大小(字節(jié))。提高這個值會導(dǎo)致兩個后果:高速度和高潛伏時間(100ms左右)。
如果設(shè)置為"0
",將使用操作系統(tǒng)默認(rèn)值。
說明 | 存儲子進(jìn)程協(xié)調(diào)數(shù)據(jù)(coordination data)的文件 |
---|---|
語法 | ScoreBoardFile file-path |
默認(rèn)值 | ScoreBoardFile logs/apache_status |
作用域 | server config |
狀態(tài) | MPM |
模塊 | beos , mpm_winnt , prefork , worker |
Apache使用記分板(scoreboard)在父進(jìn)程和子進(jìn)程之間進(jìn)行通信。一些體系結(jié)構(gòu)要求有一個文件來幫助通信。如果未指定這個文件,Apache會首先嘗試在匿名共享內(nèi)存中建立完整的記分板(scoreboard),若失敗,將繼續(xù)嘗試使用基于文件的共享存儲器在磁盤上建立這個文件。若利用這個指令指定這個文件的位置,則Apache將總是在磁盤上建立這個文件。
ScoreBoardFile /var/run/apache_status
基于文件的共享存儲器對于使用直接訪問記分板(scoreboard)的第三方程序是很有用的。
將ScoreBoardFile
放置在RAM disk中會對速度提升有很大幫助。但是同其他日志文件一樣也要注意放置位置和安全問題。
說明 | TCP發(fā)送緩沖區(qū)大小(字節(jié)) |
---|---|
語法 | SendBufferSize bytes |
默認(rèn)值 | SendBufferSize 0 |
作用域 | server config |
狀態(tài) | MPM |
模塊 | beos , mpm_netware , mpm_winnt , mpmt_os2 , prefork , worker |
這個指令設(shè)置服務(wù)器的TCP發(fā)送緩沖區(qū)的大小(字節(jié))。提高這個值會導(dǎo)致兩個后果:高速度和高潛伏時間(100ms左右)。
如果設(shè)置為"0
",將使用操作系統(tǒng)默認(rèn)值。
說明 | 服務(wù)器允許配置的進(jìn)程數(shù)上限 |
---|---|
語法 | ServerLimit number |
默認(rèn)值 | 參見下面的說明 |
作用域 | server config |
狀態(tài) | MPM |
模塊 | prefork , worker |
對于prefork
MPM,這個指令設(shè)置了MaxClients
最大允許配置的數(shù)值。對于worker
MPM,這個指令和ThreadLimit
結(jié)合使用設(shè)置了MaxClients
最大允許配置的數(shù)值。任何在重啟期間對這個指令的改變都將被忽略,但對MaxClients
的修改卻會生效。
使用這個指令時要特別當(dāng)心。如果將ServerLimit
設(shè)置成一個高出實(shí)際需要許多的值,將會有過多的共享內(nèi)存被分配。如果將ServerLimit
和MaxClients
設(shè)置成超過系統(tǒng)的處理能力,Apache可能無法啟動,或者系統(tǒng)將變得不穩(wěn)定。
對于prefork
MPM,只有在你需要將MaxClients
設(shè)置成高于默認(rèn)值256的時候才需要使用這個指令。要將此指令的值保持和MaxClients
一樣。
對于worker
MPM,只有在你需要將MaxClients
和ThreadsPerChild
設(shè)置成需要超過默認(rèn)值16個子進(jìn)程的時候才需要使用這個指令。不要將該指令的值設(shè)置的比MaxClients
和ThreadsPerChild
需要的子進(jìn)程數(shù)量高。
Apache在編譯時內(nèi)部有一個硬限制"ServerLimit 20000
"(對于ServerLimit 200000
")。你不能超越這個限制。
說明 | 服務(wù)器啟動時建立的子進(jìn)程數(shù) |
---|---|
語法 | StartServers number |
默認(rèn)值 | 參見下面的說明 |
作用域 | server config |
狀態(tài) | MPM |
模塊 | mpmt_os2 , prefork , worker |
StartServers
指令設(shè)置了服務(wù)器啟動時建立的子進(jìn)程數(shù)量。因?yàn)樽舆M(jìn)程數(shù)量動態(tài)的取決于負(fù)載的輕重,所有一般沒有必要調(diào)整這個參數(shù)。
說明 | 服務(wù)器啟動時建立的線程數(shù) |
---|---|
語法 | StartThreads number |
默認(rèn)值 | 參見下面的說明 |
作用域 | server config |
狀態(tài) | MPM |
模塊 | beos , mpm_netware |
設(shè)置了服務(wù)器啟動時建立的線程數(shù)量。因?yàn)榫€程數(shù)量動態(tài)的取決于負(fù)載的輕重,所有一般沒有必要調(diào)整這個參數(shù)。
對于mpm_netware
,默認(rèn)值是"50
",由于只有一個進(jìn)程,因此所有的線程都將用于伺服請求。
對于beos
,默認(rèn)值是"10
",同樣也是所有的線程都將用于伺服請求。
說明 | 每個子進(jìn)程可配置的線程數(shù)上限 |
---|---|
語法 | ThreadLimit number |
默認(rèn)值 | 參見下面的說明 |
作用域 | server config |
狀態(tài) | MPM |
模塊 | mpm_winnt , worker |
兼容性 | 僅用于2.0.41及以后版本的mpm_winnt |
這個指令設(shè)置了每個子進(jìn)程可配置的線程數(shù)ThreadsPerChild
上限。任何在重啟期間對這個指令的改變都將被忽略,但對ThreadsPerChild
的修改卻會生效。
使用這個指令時要特別當(dāng)心。如果將ThreadLimit
設(shè)置成一個高出ThreadsPerChild
實(shí)際需要很多的值,將會有過多的共享內(nèi)存被分配。如果將ThreadLimit
和ThreadsPerChild
設(shè)置成超過系統(tǒng)的處理能力,Apache可能無法啟動,或者系統(tǒng)將變得不穩(wěn)定。該指令的值應(yīng)當(dāng)和ThreadsPerChild
可能達(dá)到的最大值保持一致。
對于mpm_winnt
,ThreadLimit
的默認(rèn)值是1920
;對于其他MPM這個值是64
。
Apache在編譯時內(nèi)部有一個硬性的限制"ThreadLimit 20000
"(對于ThreadLimit 15000
"),你不能超越這個限制。
說明 | 每個子進(jìn)程建立的線程數(shù) |
---|---|
語法 | ThreadsPerChild number |
默認(rèn)值 | 參見下面的說明 |
作用域 | server config |
狀態(tài) | MPM |
模塊 | mpm_winnt , worker |
這個指令設(shè)置了每個子進(jìn)程建立的線程數(shù)。子進(jìn)程在啟動時建立這些線程后就不再建立新的線程了。如果使用一個類似于mpm_winnt
只有一個子進(jìn)程的MPM,這個數(shù)值要足夠大,以便可以處理可能的請求高峰。如果使用一個類似于worker
有多個子進(jìn)程的MPM,每個子進(jìn)程所擁有的所有線程的總數(shù)要足夠大,以便可以處理可能的請求高峰。
對于mpm_winnt
,ThreadsPerChild
的默認(rèn)值是64
;對于其他MPM是25
。
說明 | 處理客戶端連接的線程使用的棧尺寸(字節(jié)) |
---|---|
語法 | ThreadStackSize size |
默認(rèn)值 | NetWare上為65536;其它平臺上等于操作系統(tǒng)默認(rèn)值 |
作用域 | server config |
狀態(tài) | MPM |
模塊 | mpm_netware , mpm_winnt , worker |
兼容性 | 僅在 Apache 2.1 及以后的版本中可用 |
ThreadStackSize
指令設(shè)置了處理客戶端連接(包括調(diào)用模塊以協(xié)助處理)的線程允許使用的最大棧尺寸(字節(jié))。在大多數(shù)情況下,操作系統(tǒng)默認(rèn)的棧尺寸很合理,但是在某些情況下,需要調(diào)整這個值:
ThreadStackSize
設(shè)置為一個較大的值來解決。這種調(diào)整應(yīng)當(dāng)僅僅在第三方模塊提供者明確要求的情況下才需要,或者是您通過診斷確定是由于??臻g太小而導(dǎo)致崩潰。ThreadStackSize
值降低到小于操作系統(tǒng)默認(rèn)值可以讓每個進(jìn)程中允許生成的最大線程數(shù)量增加。這種類型的調(diào)整應(yīng)該僅在測試環(huán)境中使用,并且對所有服務(wù)器進(jìn)程進(jìn)行充分的測試,因?yàn)樘幚砟承┖币姷恼埱笮枰^大的??臻g。一個很小的服務(wù)器配置變化就有可能使得當(dāng)前的ThreadStackSize
設(shè)置變得不合適。說明 | 實(shí)際服務(wù)于請求的子進(jìn)程運(yùn)行時的用戶 |
---|---|
語法 | User unix-userid |
默認(rèn)值 | User #-1 |
作用域 | server config |
狀態(tài) | MPM |
模塊 | prefork , worker |
兼容性 | 2.0版本起僅在全局服務(wù)器配置中可用 |
User
指令用于設(shè)置實(shí)際提供服務(wù)的子進(jìn)程的用戶。為了使用這個指令,服務(wù)器必須以root
身份啟動和初始化。如果你以非root
身份啟動服務(wù)器,子進(jìn)程將不能夠切換至非特權(quán)用戶,并繼續(xù)以啟動服務(wù)器的原始用戶身份運(yùn)行。如果確實(shí)以root
用戶啟動了服務(wù)器,那么父進(jìn)程將仍然以root
身份運(yùn)行。Unix-userid是下列值之一:
用于運(yùn)行子進(jìn)程的用戶必須是一個沒有特權(quán)的用戶,這樣才能保證子進(jìn)程無權(quán)訪問那些不想為外界所知的文件,同樣的,該用戶亦需沒有執(zhí)行那些不應(yīng)當(dāng)被外界執(zhí)行的程序的權(quán)限。強(qiáng)烈推薦你專門為Apache子進(jìn)程建立一個單獨(dú)的用戶和組。一些管理員使用nobody
用戶,但是這并不能總是符合要求,因?yàn)榭赡苡衅渌绦蛞苍谑褂眠@個用戶。
不要將User
(或Group
)設(shè)置成root
,除非你明確知道自己在做什么,并且明白其風(fēng)險所在。
特別提示:在<VirtualHost>
段中使用該指令已經(jīng)不再被支持了。你可以使用suexec
的SuexecUserGroup
指令來達(dá)到這個目的。