apache主配置文件詳解(二)

配置多路處理模塊(MPM)

         編輯多路處理模塊配置文件:
         vi /usr/local/apache-2.2.6/conf/extra/httpd-mpm.conf 

         如果使用prefork多路處理模塊,按下面的提示修改:
###=============httpd-mpm.conf prefork begin===================
##設置prefork多路處理模塊
<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    ServerLimit    4000
    MaxClients         4000
    MaxRequestsPerChild   0
</IfModule>
###=============httpd-mpm.conf prefork end===================
   指令說明:
StartServers
        設置服務器啓動時建立的子進程數量。因爲子進程數量動態的取決於負載的輕重,所有一般沒有必要調整這個參數。
MinSpareServers:(可理解爲備用\侯補的子進程)
        設置空閒子進程的最小數量。所謂空閒子進程是指沒有正在處理請求的子進程。如果當前空閒子進程數少於 MinSpareServers ,那麼Apache將以最大每秒一個的速度產生新的子進程。只有在非常繁忙機器上才需要調整這個參數。將此參數設的太大通常是一個壞主意。
         MaxSpareServers
        設置空閒子進程的最大數量。如果當前有超過MaxSpareServers數量的空閒子進程,那麼父進程將殺死多餘的子進程。只有在非常繁忙機器上才需要調整這個參數。將此參數設的太大通常是一個壞主意。如果你將該指令的值設置爲比MinSpareServers 小,Apache將會自動將其修改成"MinSpareServers+1"。
         ServerLimit
         服務器允許配置的進程數上限。只有在你需要將MaxClients設置成高於默認值256的時候才需要使用。要將此指令的值保持和MaxClients一樣。修改此指令的值必須完全停止服務後再啓動才能生效,以restart方式重啓動將不會生效。
 MaxClients
         用於伺服客戶端請求的最大請求數量(最大子進程數),任何超過MaxClients限制的請求都將進入等候隊列。默認值是256,如果要提高這個值必須同時提高ServerLimit的值。筆者建議將初始值設爲(以Mb爲單位的最大物理內存/2),然後根據負載情況進行動態調整。比如一臺4G內存的機器,那麼初始值就是4000/2=2000。
         MaxRequestsPerChild
         設置每個子進程在其生存期內允許伺服的最大請求數量。到達MaxRequestsPerChild的限制後,子進程將會結束。如果MaxRequestsPerChild爲"0",子進程將永遠不會結束。將MaxRequestsPerChild設置成非零值有兩個好處:可以防止(偶然的)內存泄漏無限進行而耗盡內存;
給進程一個有限壽命,從而有助於當服務器負載減輕的時候減少活動進程的數量。
如果設置爲非零值,筆者建議設爲10000-30000之間的一個值。
          公式:
MaxClients<=ServerLimit

  如果使用worker多路處理模塊,按下面的提示修改:
###=============httpd-mpm.conf worker begin===================
##設置worker多路處理模塊
<IfModule mpm_worker_module>
    StartServers          5
    ServerLimit          20
    ThreadLimit         200
    MaxClients         4000
    MinSpareThreads      25
    MaxSpareThreads   250
    ThreadsPerChild     200
    MaxRequestsPerChild   0
</IfModule>
###=============httpd-mpm.conf worker end===================
         指令說明:
        StartServers
        設置服務器啓動時建立的子進程數量。因爲子進程數量動態的取決於負載的輕重,所有一般沒有必要調整這個參數。
        ServerLimit
        服務器允許配置的進程數上限。只有在你需要將MaxClients和ThreadsPerChild設置成需要超過默認值16個子進程的時候才需要使用這個指令。不要將該指令的值設置的比MaxClients 和ThreadsPerChild需要的子進程數量高。修改此指令的值必須完全停止服務後再啓動才能生效,以restart方式重啓動將不會生效。
        ThreadLimit
        設置每個子進程可配置的線程數ThreadsPerChild上限,該指令的值應當和ThreadsPerChild可能達到的最大值保持一致。修改此指令的值必須完全停止服務後再啓動才能生效,以restart方式重啓動將不會生效。
        MaxClients
       用於伺服客戶端請求的最大接入請求數量(最大線程數)。任何超過MaxClients限制的請求都將進入等候隊列。默認值是"400",16 (ServerLimit)乘以25(ThreadsPerChild)的結果。因此要增加MaxClients的時候,你必須同時增加 ServerLimit的值。筆者建議將初始值設爲(以Mb爲單位的最大物理內存/2),然後根據負載情況進行動態調整。比如一臺4G內存的機器,那麼初始值就是4000/2=2000。
        MinSpareThreads
       最小空閒線程數,默認值是"75"。這個MPM將基於整個服務器監視空閒線程數。如果服務器中總的空閒線程數太少,子進程將產生新的空閒線程。
        MaxSpareThreads
       設置最大空閒線程數。默認值是"250"。這個MPM將基於整個服務器監視空閒線程數。如果服務器中總的空閒線程數太多,子進程將殺死多餘的空閒線程。MaxSpareThreads的取值範圍是有限制的。Apache將按照如下限制自動修正你設置的值:worker要求其大於等於 MinSpareThreads加上ThreadsPerChild的和。 
        ThreadsPerChild
       每個子進程建立的線程數。默認值是25。子進程在啓動時建立這些線程後就不再建立新的線程了。每個子進程所擁有的所有線程的總數要足夠大,以便可以處理可能的請求高峯。
        MaxRequestsPerChild
       設置每個子進程在其生存期內允許伺服的最大請求數量。到達MaxRequestsPerChild的限制後,子進程將會結束。如果MaxRequestsPerChild爲"0",子進程將永遠不會結束。將MaxRequestsPerChild設置成非零值有兩個好處:可以防止(偶然的)內存泄漏無限進行而耗盡內存;
給進程一個有限壽命,從而有助於當服務器負載減輕的時候減少活動進程的數量。
如果設置爲非零值,筆者建議設爲10000-30000之間的一個值。
         公式:
         ThreadLimit >= ThreadsPerChild
         MaxClients <= ServerLimit * ThreadsPerChild 必須是ThreadsPerChild的倍數
         MaxSpareThreads >= MinSpareThreads+ThreadsPerChild

配置Apache服務器默認設置
         編輯Apache服務器默認設置文件:
         vi /usr/local/apache-2.2.6/conf/extra/httpd-default.conf 
         按下面的提示修改:
###=============httpd-default.conf begin===================
##Apache默認設置文件
Timeout 300
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 5
UseCanonicalName Off
AccessFileName .htaccess
ServerTokens Prod
ServerSignature Off
HostnameLookups Off
###=============httpd-default.conf end====================
         指令說明:
    Timeout
         設置服務器在斷定請求失敗前等待的秒數。默認值300。
         KeepAlive
         設置是否啓用HTTP持久鏈接,On 代表打開,Off 代表關閉。如果用於同一頁面包含大量靜態文件的應用,設置爲On,以提高性能;如果用於主要爲動態頁面的應用,設置爲Off,以節約內存資源;如果服務器前跑有squid或者其它七層設備,設置爲On。
        MaxKeepAliveRequests
        限制當啓用KeepAlive時,每個連接允許的請求數量。如果將此值設爲"0",將不限制請求的數目。筆者建議將此值設爲100-500之間的一個值,以確保最優的服務器性能。
    KeepAliveTimeout
        設置持久鏈接中服務器在兩次請求之間等待的秒數。對於高負荷服務器來說,KeepAliveTimeout值較大會導致一些性能方面的問題:超時值越大,與空閒客戶端保持連接的進程就越多。
         UseCanonicalName
         配置服務器如何確定它自己的域名,可選值爲On | Off | DNS。DNS用於爲大量基於IP的虛擬主機支持那些古董級的不提供"Host:"頭的瀏覽器使用。筆者建議設置爲Off。
        AccessFileName
        設置分佈式配置文件的名字,默認爲.htaccess。如果爲某個目錄啓用了分佈式配置文件功能,那麼在向客戶端返回其中的文檔時,服務器將在這個文檔所在的各級目錄中查找此配置文件,因此會帶來性能問題,筆者建議關閉分佈式配置文件功能。
        ServerTokens
        控制服務器迴應給客戶端的"Server:"應答頭是否包含關於服務器操作系統類型和編譯進的模塊描述信息,同時還控制着 ServerSignature指令的顯示內容。可選值爲Full | OS | Minor | Minimal | Major | Prod。筆者建議設置爲顯示最少信息的Prod。
        ServerSignature
        配置服務器生成頁面的頁腳,可選值爲On | Off | EMail。採用On會簡單的增加一行關於服務器版本和正在伺服的虛擬主機的ServerName,而EMail設置會額外創建一個指向 ServerAdmin的"mailto:"部分。建議使用默認值Off。
        HostnameLookups
        設置是否啓用對客戶端IP的DNS查找,可選值爲On | Off | Double。DNS查詢會造成明顯的時間消耗,建議設置爲Off。

 4.3.5 配置mod_deflate壓縮模塊
         mod_deflate模塊提供了DEFLATE輸出過濾器,允許服務器在將輸出內容發送到客戶端以前進行壓縮,以節約帶寬。
         編輯mod_deflate壓縮模塊設置文件:
         vi /usr/local/apache-2.2.6/conf/extra/httpd-deflate.conf 
         按下面的提示修改:
###=============httpd-deflate.conf begin===================
##mod_deflate壓縮模塊設置文件
<IfModule mod_deflate.c>
    ##定義deflate默認設置
    DeflateMemLevel 9
    DeflateWindowSize 15
    DeflateBufferSize 8096
    DeflateCompressionLevel 8
    ## 調試時去掉下面5行前的註釋符,用以記錄壓縮日誌
    #DeflateFilterNote Input instream
    #DeflateFilterNote Output outstream
    #DeflateFilterNote Ratio ratio
    #LogFormat '"%r" %b %{outstream}n/%{instream}n (%{ratio}n%%) "%{User-agent}i"' deflate
    #CustomLog logs/deflate_log deflate 
    ## 插入DEFLATE過濾器,以啓用輸出壓縮
SetOutputFilter DEFLATE
## Netscape 4.x 有一些問題,僅壓縮txt/html類型
    BrowserMatch ^Mozilla/4 gzip-only-text/html
## Netscape 4.06-4.08不能處理任何壓縮內容,不進行壓縮
    BrowserMatch ^Mozilla/4.0[678] no-gzip
    ## MSIE 會僞裝成 Netscape ,但是事實上它沒有問題
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
    ## 設置圖片、mp3、壓縮格式文件等不需要進行壓縮內容
    SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
    ## 確保代理不會發送錯誤的內容
    Header append Vary User-Agent env=!dont-vary
</IfModule>
###=============httpd-deflate.conf end=====================
         指令說明:
        DeflateMemLevel:指定zlib在壓縮時最多可以使用多少內存,取值範圍在1到9之間。
        DeflateWindowSize:定義zlib壓縮窗口(compression window)的大小,取值範圍在1到15之間,通常窗口越大壓縮效果越好。
        DeflateBufferSize:定義zlib一次壓縮的片斷的字節數,默認爲8096。
        DeflateCompressionLevel:設定壓縮程度,越高的壓縮程度就會有越好的壓縮效果,同時也意味着佔用越多的CPU資源。取值範圍在 1(最低壓縮率) 到 9(最高壓縮率)之間,如果不設置此指令,默認爲zlib的默認值。
        DeflateFilterNote:在日誌中放置壓縮率標記。
     語法爲:DeflateFilterNote type notename
         notename就表示這個壓縮率標記的名字,你可以爲了某種統計目的將這個標記的名字添加到訪問日誌中。
         type指定notename標記所記錄的數據類型:Input,在標記中存儲過濾器輸入流的字節數;Output,在標記中存儲過濾器輸出流的字節數;Ratio,在標記中存儲過濾器的壓縮比(輸出/輸入*100),這是type的默認值。
         SetOutputFilter:設置用於在服務器應答發送到客戶端之前使用的過濾器。如果多於一個過濾器,必須按照處理內容的順序用分號(;)分隔。
        BrowserMatch:基於User-Agent頭有條件地設置環境變量。
        SetEnvIfNoCase:根據大小寫無關的客戶端請求屬性設置環境變量。
         Headers:配置HTTP應答頭。這個指令可以替換、合併、刪除HTTP應答頭。應答頭緊跟在內容處理器和輸出過濾器完工之後生成,這時候才能對頭進行修改。

 4.3.6 配置mod_expires模塊
          這個模塊控制服務器應答時的Expires頭內容和Cache-Control頭的max-age指令。有效期(expiration date)可以設置爲相對於源文件的最後修改時刻或者客戶端的訪問時刻。這些HTTP頭向客戶端表明了文檔的有效性和持久性。如果有緩存,文檔就可以從緩存(除已經過期)而不是從服務器讀取。接着,客戶端考察緩存中的副本,看看是否過期或者失效,以決定是否必須從服務器獲得更新。
         編輯mod_expires設置文件:
         vi /usr/local/apache-2.2.6/conf/extra/httpd-expires.conf 
         按下面的提示修改:
###=============httpd-expires.conf begin===================
## mod_expires設置文件
<IfModule mod_expires.c>
        ExpiresActive on
     ExpiresDefault A300 
        ExpiresByType text/html A300
        ExpiresByType image/gif A2592000
        ExpiresByType image/jpeg A2592000
        ExpiresByType image/png A2592000
        ExpiresByType text/css A2592000
        ExpiresByType text/js A2592000
        ExpiresByType text/javascript A2592000
        ExpiresByType application/x-javascript A2592000
</IfModule>
###=============httpd-expires.conf end=====================
         指令說明:
        ExpiresActive:對其作用範圍內的文檔啓用或禁用產生Expires和Cache-Control頭的功能。若設置爲 Off 則不會爲其作用範圍內的任何文檔生成Expires和Cache-Control頭(除非被更低一層的規則改寫,比如.htaccess文件)。若設置爲 On 則會按照ExpiresByType和ExpiresDefault指令定義的標準爲其作用範圍內的文檔生成Expires和Cache-Control 頭。注意,這個指令並不保證Expires或Cache-Control頭一定會產生。如果定義的標準不規範,將不會產生這兩個頭,其效果是好像從未設置過這個指令一樣。
        ExpiresByType:爲指定MIME類型的文檔配置Expires頭的值。
         語法爲:ExpiresByType MIME-type <code>seconds
         seconds參數設置了添加到基準時間以構造有效期限的秒數。Cache-Control: max-age的計算方法是從有效期減去當前請求時間並轉化爲秒數。
         基準時刻可以是源文件的最後修改時刻或者客戶端對源文件的訪問時刻,至於使用那一個則由<code>指定。"M"表示源文件的最後修改時刻,"A"表示客戶端對源文件的訪問時刻。需要注意的是<code>和seconds之間沒有空格。如果使用"M",所有當前緩存中的文檔副本都將在同一時刻過期,這個可能對定期更新的URL(比如位於同一位置的每週通告)很有好處。如果使用"A",則每個客戶端所得到的有效期是不一樣的,這個可能對那些幾乎不更新的圖片文件很有好處,特別是對於一組都引用了相同圖片的相關文檔。
         ExpiresDefault:設置其作用範圍內的所有文檔的默認有效期的計算方法,它可以被ExpiresByType指令基於MIME類型被改寫。
          語法爲:ExpiresDefault <code>seconds
          <code>seconds同ExpiresByType一致。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章