本文出自 「王達博客」 博客,轉載請與做者聯繫!html
做者已受權本博客轉載瀏覽器
3.4.3
Apache Web服務器資源使用限制配置
「資源使用限制」就是要限制用戶對網站特定資源(如目錄、服務器硬件等)的訪問。相關指令包括:LimitRequestBody、LimitRequestFields、LimitRequestFieldSize、LimitRequestLine、RLimitCPU、RLimitMEM、RLimitNPROC和ThreadStackSize。
LimitRequest*系列指令用來限制Apache在讀取客戶端請求的過程當中使用的資源數量。經過限制這些值,能夠減輕某些拒絕服務(DOS)***;RLimit*系列指令限制被Apache子進程所派生的進程使用的資源數量,一般這些指令用來控制CGI腳本和SSI exec命令所使用的資源;ThreadStackSize指令在某些平臺上用來控制堆棧大小。
1.LimitRequestBody
LimitRequestBody指令限制客戶端發送的HTTP請求體的最大字節長度。其語法格式爲:LimitRequestBody Bytes,Bytes在0(意味着無限制)到2 147 483 647(2GB)間限制了請求體所容許的字節數。默認值爲「
0」
。
LimitRequestBody指令可讓用戶在其做用範圍內(整個服務器、特定目錄、特定文件、特定位置)設置一個容許客戶端發送的HTTP請求體的最大字節長度的限制。若是客戶端的請求超出了這個限制,服務器會迴應一個錯誤,而不是爲這個請求繼續提供服務。一個普通請求的信息體在很大程度上取決於資源的天然屬性和這個資源容許的方法。CGI腳本常常用消息體把表單的信息傳遞給服務器。使用PUT方法至少可以獲得與服務器指望從這個資源獲得的信息量差很少大小的值。
此指令給了服務器管理員更大的可控性,以控制客戶端不正常的請求行爲。這有助於避免某些形式的拒絕服務***。好比,若是容許文件上傳到某個位置,並且但願能將上傳文件的大小設置爲100KB,可使用下面的指令:
LimitRequestBody 102400
2.LimitRequestFields
LimitRequestFields用來限制接受客戶端請求中HTTP請求頭域的數量。其語法格式爲:LimitRequestFields Number,Number是一個0(意味着不限)到32 767之間的整數。默認值爲「
100」
。默認值爲編譯時的常量DEFAULT_LIMIT_REQUEST_FIELDS(發佈值爲100)。
LimitRequestFields指令容許服務器管理員修改在一個HTTP請求中的請求頭域的數量限制。服務器須要此值大於一個普通客戶端請求中包含頭域的數量。一個客戶端請求頭域的數量不多大於20,但根據客戶端的不一樣這個數字有很大的差異,常常取決於用戶配置他們的瀏覽器擴展以支持更詳細的內容協商。可選的HTTP擴展常用請求頭域來實現。
這個指令給了服務器管理員更大的可控性,以控制客戶端不正常的請求行爲。這有助於避免某些形式的拒絕服務***。若是正常使用的客戶端獲得了服務器的錯誤應答,指出其在請求中發送了過多的頭域,你應該適當地增大此值。例如:
LimitRequestFields 50
3.LimitRequestFieldSize
LimitRequestFieldSize指令用來限制客戶端發送的請求頭的字節數。其語法格式爲:LimitRequestFieldsize Bytes,Bytes指定了HTTP請求頭容許的字節大小。默認值爲「
8190」
。
LimitRequestFieldSize指令容許服務器管理員增長,或減小HTTP請求頭域大小的限制。通常來講,服務器須要此值足夠大,以適應普通客戶端的任何請求的頭域大小。一個普通頭域的大小對於不一樣的客戶端來講是有很大差異的,通常與用戶配置他們的瀏覽器以支持更多的內容協議密切相關。
這個指令給了服務器管理員更大的可控性,以控制客戶端不正常的請求行爲。這有助於避免某些形式的拒絕服務***。例如:
LimitRequestFieldSize 4094
通常狀況下,請不要改變這個設置,而是保持其默認設置。
4.LimitRequestLine
LimitRequestLine指令用來限制接收客戶端發送的HTTP請求行的字節數。其語法格式爲:LimitRequestLine Bytes,Bytes將設置HTTP請求行的字節數限制。默認值也爲「
8190」
。
LimitRequestLine指令容許服務器管理員增長或減小客戶端HTTP請求行容許大小的限制。由於請求行包括HTTP方法、URI、協議版本,因此LimitRequestLine指令會限制請求URI的長度。服務器會須要這個值足夠大以裝載它全部的資源名,包括可能在GET請求中所傳遞的查詢部分的全部信息。
這個指令也給了服務器管理員更大的可控性,以控制客戶端不正常的請求行爲。這有助於避免某些形式的拒絕服務***。例如:
LimitRequestLine 4094
通常狀況下,不須要改變此設置的默認值。
5.RLimitCPU
RLimitCPU指令用來限制Apache子進程派生的進程佔用CPU的最大秒數。CPU資源限制表示爲每進程佔用的秒數。其語法格式爲:RLimitCPU seconds|max [seconds|max],默認值未定義,使用操做系統默認值。
第一個參數設置了全部進程的軟資源限制,第二個參數設置了最大資源限制。兩個參數都可設置爲一個數值,或是「max」,以表示設置爲操做系統容許的最大值。增大此資源限制最大值須要以root運行服務器或是在初始化啓動語句中進行設置。
這個限制將做用於Apache子進程服務的請求所衍生出來的進程,而不是Apache子進程自己。這個範圍包括CGI腳本和SSI執行命令,但不包括全部從Apache父進程衍生出來的進程。好比,管道日誌。
6.RLimitMEM
RLimitMEM指令用來限制由Apache子進程派生的進程佔用的最大內存字節數。內存資源限制表示爲每進程佔用的字節數。其語法格式爲:RLimitMEM Bytes|max [Bytes|max],也沒有定義默認值,使用操做系統默認值。
第一個參數設置了全部進程的軟資源限制,第二個參數設置了最大資源限制。兩個參數都可設置爲一個數值,或是「max」,以表示設置爲操做系統容許的最大值。增大此資源限制最大值須要以root運行服務器或是在初始化啓動語句中進行設置。
這個限制將做用於Apache子進程服務的請求所衍生出來的進程,而不是Apache子進程自己。這個範圍包括CGI腳本和SSI執行命令,但不包括全部從Apache父進程衍生出來的進程。好比,管道日誌。
7.RLimitNPROC
RLimitNPROC指令用來限制由Apache子進程派生的進程所派生的進程數目。進程限制控制了每一個用戶的進程數。其語法格式爲:RLimitNPROC number|max [number|max],也沒有定義默認值,使用操做系統默認值。
第一個參數設置了全部進程的軟資源限制,第二個參數設置了最大資源限制。兩個參數都可設置爲一個數值,或是「max」,以表示設置爲操做系統容許的最大值。增大此資源限制最大值須要以administrator帳戶運行服務器或是在初始化啓動語句中進行設置。
這個限制將做用於Apache子進程服務的請求所衍生出來的進程,而不是Apache子進程自己。這個範圍包括CGI腳本和SSI執行命令,但不包括全部從Apache父進程衍生出來的進程。好比,管道日誌。
|
若是CGI進程不是以Web服務器的uid啓動的,那麼這個指令將限制服務器本身可以建立的進程數目。此種狀況將在error_log中以「cannot fork」進行記錄。
|
8.ThreadStackSize
ThreadStackSize指令用來處理客戶端鏈接的線程使用的棧尺寸(字節)。其語法格式爲:ThreadStackSize size,在NetWare系統中默認值爲65 536;其餘系統中等於操做系統默認值。
ThreadStackSize指令設置了處理客戶端鏈接(包括調用模塊以協助處理)的線程容許使用的最大棧尺寸(字節)。在大多數狀況下,操做系統默認的棧尺寸很合理,可是在某些狀況下,須要調整這個值。如,在默認棧尺寸較小的平臺上(好比HP-UX),Apache可能會在使用一些須要較大棧尺寸的第三方模塊時崩潰。這樣的問題能夠經過將ThreadStackSize設置爲一個較大的值來解決。這種調整應當僅僅在第三方模塊提供者明確要求的狀況下才須要,或者是經過診斷肯定是因爲棧空間過小而致使崩潰。
而在某些平臺上,若是默認的棧空間大於服務器運行所需空間,那麼將ThreadStackSize值下降到小於操做系統默認值可讓每一個進程中容許生成的最大線程數量增長。這種類型的調整應該僅在測試環境中使用,而且對全部服務器進程進行充分的測試,由於處理某些罕見的請求須要較大的棧空間。一個很小的服務器配置變化就有可能使得當前的ThreadStackSize設置變得不合適。服務器