Apache服務器全局配置之資源限制配置篇
本文摘錄自Apache2.2手冊
資源限制相關指令:
LimitRequestBody
LimitRequestFields
LimitRequestFieldsize
LimitRequestLine
RLimitCPU
RLimitMEM
RLimitNPROC
ThreadStackSize
LimitRequest*系列指令用來限制Apache在讀取客戶端請求的過程當中使用的資源數量。經過限制這些值,能夠減輕某些拒絕服務(DOS)***。
RLimit*系列指令用來限制Apache子進程所派生的進程使用的資源數量。一般,這些指令用來控制CGI腳本和SSI exec命令所使用的資源。
ThreadStackSize指令在某些平臺上用來控制堆棧大小。
LimitRequestBody指令
語法:LimitRequestBody bytes
默認值:LimitRequestBody 0
這個指令用來設置客戶端發送的HTTP請求的最大字節數。LimitRequestBody指令能夠做用於整個服務器、特定目錄、特定文件、特定位置。若是客戶端的請求超出了LimitRequestBody設置的值,那麼服務器會迴應一個錯誤信息給客戶端,而不會去處理這個請求。
Bytes在0(不限制)到2147483647(2GB)之間。
好比:你容許客戶端將文件上傳到某個位置,而且但願將上傳文件的大小限制爲500K,
LimitRequestBody 512000
LimitRequestFields指令
語法:LimitRequestFields number
默認:LimitRequestFields 100
這個指令用來設置客戶端向服務器請求中HTTP請求頭域的數量。通常一個客戶端請求頭域的數量不多大於20,可是客戶端的不一樣這個數字也將有很大的差別。這個常常取決於用戶配置他們的瀏覽器擴展以支持更詳細的內容協商。可選的HTTP擴展常用請求頭域來實現。
number是一個0(不限制)到32767之間的整數。默認值爲編譯時的常量DEFAULT_LIMIT_REQUEST_FIELDS(發佈值爲100)。
LimitRequestFieldsize指令
語法:LimitRequestFieldsize bytes
默認:LimitRequestFieldsize 8190
這個指令用來設置客戶端發送的HTTP請求頭的最大字節數。通常來講,服務器須要此值夠大,以適應普通客戶的的任何請求的頭域大小。頭域的大小通常與瀏覽器支持的內容協議有密切關係。
通常狀況下,不要更改這個值,使用默認便可。
LimitRequestLine指令
語法:LimitRequestLine bytes
默認:LimitRequestLine 8190
這個指令用來設置客戶端發送的HTTP請求行的最大字節數。請求行包括HTTP方法、URL、協議版本等。所以LimitRequestLine指令可以限制URL的長度,服務器會須要這個值足夠大以裝載它全部的資源名,包括可能在GET請求中所傳遞的查詢部分的全部信息。
通常狀況下,不要更改這個值,使用默認便可。
RLimitCPU指令
語法:RLimitCPU seconds | max [seconds|max]
默認:未定義,使用操做系統默認值
這個指令用來設置Apache子進程派生的進程佔用CPU的最大秒數。
這裏能夠設置一個或者兩個參數。第一個參數設置全部進程的軟資源限制,第二個參數設置最大資源限制。兩個參數都可設置爲一個數值或者是「max」(表示設置爲操做系統容許的最大值)。要增大此資源限制最大值須要以root運行服務器或是在初始化啓動語句中進行設置。
這個指令只做用於Apache子進程所派生的進程,而不是Apache子進程自己。這個範圍包括CGI腳本和SSI執行命令,不包括全部從Apache父進程派生出的進程。好比管道日誌。
CPU資源限制表示每進程佔用的秒數。
RLimitMEM指令
語法:RLimitMEM bytes | max [bytes|max]
默認:未定義,使用操做系統默認值
這個指令用來設置Apache子進程派生的進程佔用內存的最大字節數。
這裏能夠設置一個或者兩個參數。第一個參數設置全部進程的軟資源限制,第二個參數設置最大資源限制。兩個參數都可設置爲一個數值或者是「max」(表示設置爲操做系統容許的最大值)。要增大此資源限制最大值須要以root運行服務器或是在初始化啓動語句中進行設置。
這個指令只做用於Apache子進程所派生的進程,而不是Apache子進程自己。這個範圍包括CGI腳本和SSI執行命令,不包括全部從Apache父進程派生出的進程。好比管道日誌。
內存資源限制表示爲每進程佔用的字節數。
RLimitNPROC指令
語法:RLimitNPROC number | max [number|max]
默認:未定義,使用操做系統默認值
這個指令用來設置Apache子進程派生的進程數目。
這裏能夠設置一個或者兩個參數。第一個參數設置全部進程的軟資源限制,第二個參數設置最大資源限制。兩個參數都可設置爲一個數值或者是「max」(表示設置爲操做系統容許的最大值)。要增大此資源限制最大值須要以root運行服務器或是在初始化啓動語句中進行設置。
這個指令只做用於Apache子進程所派生的進程,而不是Apache子進程自己。這個範圍包括CGI腳本和SSI執行命令,不包括全部從Apache父進程派生出的進程。好比管道日誌。
進程限制控制了每一個用戶的進程數。
ThreadStackSize指令
語法:ThreadStackSize size
默認:NetWare上爲65536,其餘平臺上等於操做系統默認值
這個指令用來設置處理客戶端鏈接(包括調用模塊以協助處理)的線程容許使用的最大棧尺寸(字節)。
大多數狀況下,操做系統默認的棧尺寸很合理。可是在某些狀況下,須要調整這個值:
在默認棧尺寸較小的平臺上(好比HP-UX),Apache可能會在使用一些須要較大棧尺寸的第三方模塊時崩潰。這樣的問題能夠經過將ThreadStackSize設置爲一個較大的值來解決。這種調整應當僅僅在第三方模塊提供者明確要求的狀況下才須要,或者是您經過診斷肯定是因爲棧空間過小而致使崩潰。
在某些平臺上,若是默認的棧空間大於服務器運行所需空間,那麼將ThreadStackSize值下降到小於操做系統默認值可讓每一個進程中容許生成的最大線程數量增長。這種類型的調整應該僅在測試環境中使用,而且對全部服務器進程進行充分的測試,由於處理某些罕見的請求須要較大的棧空間。一個很小的服務器配置變化就有可能使得當前的ThreadStackSize設置變得不合適。