1. 程式人生 > >Apache優化及模塊的詳解

Apache優化及模塊的詳解

啟動 協商 切換 root tro 測試工具 設定 編碼 map

    LoadModule auth_basic_module modules/mod_auth_basic.so            #基本認證模塊  
    LoadModule auth_digest_module modules/mod_auth_digest.so        #使用MD5的用戶驗證模塊  
    LoadModule authn_file_module modules/mod_authn_file.so            #使用文本文件的用戶驗證  
    LoadModule authn_alias_module modules/mod_authn_alias.so        #在原有的驗證方法上提供拓展的驗證  
    LoadModule authn_anon_module modules
/mod_authn_anon.so #允許匿名訪問已驗證的區域 LoadModule authn_dbm_module modules/mod_authn_dbm.so #使用數據庫文件驗證 LoadModule authn_default_module modules/mod_authn_default.so #認證的撤銷模塊 LoadModule authz_host_module modules/mod_authz_host.so #基於主機名(或IP)的組授權 LoadModule authz_user_module modules
/mod_authz_user.so #用戶授權 LoadModule authz_owner_module modules/mod_authz_owner.so #依照文件擁有者的授權 LoadModule authz_groupfile_module modules/mod_authz_groupfile.so #使用明文文件的組授權 LoadModule authz_dbm_module modules/mod_authz_dbm.so #使用數據庫的組授權 LoadModule authz_default_module modules
/mod_authz_default.so #授權的撤銷模塊 LoadModule ldap_module modules/mod_ldap.so #LDAP提供其它LADP的連接接和緩存服務模塊 LoadModule authnz_ldap_module modules/mod_authnz_ldap.so #允許使用一個LDAP的目錄來存放HTTP基本授權文件 LoadModule include_module modules/mod_include.so #服務器端解析HTML語法的模塊 LoadModule log_config_module modules/mod_log_config.so #記錄服務器請求日誌 LoadModule logio_module modules/mod_logio.so #記錄每個請求的I/O字節數 LoadModule env_module modules/mod_env.so #設置傳遞給CGI腳本和SSI頁面的環境? LoadModule ext_filter_module modules/mod_ext_filter.so #在遞交給客戶端以前通過外部程序發送相應本體 LoadModule mime_magic_module modules/mod_mime_magic.so #通過查看一個文件的一些內容判斷MIME類別 LoadModule expires_module modules/mod_expires.so #根據用戶的特別設定來生成失效和隱藏控制的http頭信息 LoadModule deflate_module modules/mod_deflate.so #傳送給客戶端以前壓縮數據 LoadModule headers_module modules/mod_headers.so #定制響應和回復的HTTP頭的內容 LoadModule usertrack_module modules/mod_usertrack.so #在一個站點上跟蹤用戶的登錄信息 LoadModule setenvif_module modules/mod_setenvif.so #允許經過客戶編碼請求來設定環境變量 LoadModule mime_module modules/mod_mime.so #通過文件的一些屬性判讀MIME類型 LoadModule dav_module modules/mod_dav.so #基於WEB的創作和版本? LoadModule status_module modules/mod_status.so #提供服務器運行信息 LoadModule autoindex_module modules/mod_autoindex.so #自動列出一個目錄的索引表(類似於UNIX上的ls和DOS下的dir) LoadModule info_module modules/mod_info.so #提供服務配置的一個綜合概況 LoadModule dav_fs_module modules/mod_dav_fs.so #為mod_dav提供文件系統支持 LoadModule vhost_alias_module modules/mod_vhost_alias.so #為虛擬主機提供動態配置 LoadModule negotiation_module modules/mod_negotiation.so #為內容判斷提供支持 LoadModule dir_module modules/mod_dir.so #為“/”結尾的重定向和目錄文件索引 LoadModule actions_module modules/mod_actions.so #提供了基於請求和媒體類型的CGI腳本執行的支持 LoadModule speling_module modules/mod_speling.so #嘗試糾正用戶輸入錯誤的網址 LoadModule userdir_module modules/mod_userdir.so #用戶特定目錄 LoadModule alias_module modules/mod_alias.so #提供主機文件系統不同部分的文件樹映射為URL LoadModule rewrite_module modules/mod_rewrite.so #提供在運行中基於規則的地址重寫的支持 LoadModule proxy_module modules/mod_proxy.so #基於HTTP1.1協議的網關或代理服務器 LoadModule proxy_balancer_module modules/mod_proxy_balancer.so #負載均衡的mod_proxy拓展 LoadModule proxy_ftp_module modules/mod_proxy_ftp.so #為mod_proxy提供的ftp支持模塊 LoadModule proxy_http_module modules/mod_proxy_http.so #為mod_proxy提供的http支持模塊 LoadModule proxy_connect_module modules/mod_proxy_connect.so #mod_proxy的連接處理拓展模塊 LoadModule cache_module modules/mod_cache.so #目錄隱藏在URL外? LoadModule suexec_module modules/mod_suexec.so #允許CGI腳本使用特定的用戶和組運行 LoadModule disk_cache_module modules/mod_disk_cache.so #管理內容隱藏存放來適合URL的工具? LoadModule file_cache_module modules/mod_file_cache.so #在內存中緩存一個文件列表 LoadModule mem_cache_module modules/mod_mem_cache.so #隱藏內容於URL LoadModule cgi_module modules/mod_cgi.so #執行CGI腳本

 Apache 性能配置優化
前言

最近在進行apache性能優化設置。在修改apache配置)文件之前需要備份原有的配置文件夾conf,這是網站架設的好習慣。以下的apache配置調優均是在red had的環境下進行的。
httpd 相關查看命令了解

查看當前安裝模塊mpm(多路處理器)
[root@localhost ~]# httpd -l

查看httpd進程數(即各個mpm模式下Apache能夠處理的並發請求數)
[root@localhost ~]# ps -ef | grep httpd | wc -l
得到的結果數字就是表示可以同時並發的進程數據,一個父進程,5個子進程。apache默認是開啟5個子進程

查看Apache的並發請求數及其TCP連接狀態
[root@localhost ~]# netstat -n | awk ‘/^tcp/ { S[$NF]} END {for(a in S) print a, S[a]}‘
    ESTABLISHED
---
-        CLOSED:無連接是活動的或正在進行
-        LISTEN:服務器在等待進入呼叫
-        SYN_RECV:一個連接請求已經到達,等待確認
-        SYN_SENT:應用已經開始,打開一個連接
-        ESTABLISHED:正常數據傳輸狀態
-        FIN_WAIT1:應用說它已經完成
-        FIN_WAIT2:另一邊已同意釋放
-        ITMED_WAIT:等待所有分組死掉
-        CLOSING:兩邊同時嘗試關閉
-        TIME_WAIT:另一邊已初始化一個釋放
-        LAST_ACK:等待所有分組死掉

查看請求80服務的client ip按照連接數排序。
[root@localhost ~]# netstat -nat|grep ":80"|awk ‘{print $5}‘ |awk -F: ‘{print $1}‘ | sort| uniq -c|sort -n

查看apache詳細鏈接情況
[root@localhost ~]# netstat -aptol

檢測某一臺服務器的端口是否開啟狀態
[root@localhost ~]# nc -v -w 10 -z 172.20.206.147 25801

驗證apache2配置是否正確
[root@localhost ~]# httpd -t

apache模塊啟用

模塊介紹:Apache 各個模塊功能 基本(B)模塊默認包含,必須明確禁用;擴展(E)/實驗(X)模塊默認不包含,必須明確啟用。
        模塊名稱    狀態    簡要描述
        mod_actions (B) 基於媒體類型或請求方法,為執行CGI腳本而提供
        mod_alias (B) 提供從文件系統的不同部分到文檔樹的映射和URL重定向
        mod_asis (B) 發送自己包含HTTP頭內容的文件
        mod_auth_basic (B) 使用基本認證
        mod_authn_default (B) 在未正確配置認證模塊的情況下簡單拒絕一切認證信息
        mod_authn_file (B) 使用純文本文件為認證提供支持
        mod_authz_default (B) 在未正確配置授權支持模塊的情況下簡單拒絕一切授權請求
        mod_authz_groupfile (B) 使用純文本文件為組提供授權支持
        mod_authz_host (B) 供基於主機名、IP地址、請求特征的訪問控制
        mod_authz_user (B) 基於每個用戶提供授權支持
        mod_autoindex (B) 自動對目錄中的內容生成列表,類似於"ls"或"dir"命令
        mod_cgi (B) 在非線程型MPM(prefork)上提供對CGI腳本執行的支持
        mod_cgid (B) 在線程型MPM(worker)上用一個外部CGI守護進程執行CGI腳本
        mod_dir (B) 指定目錄索引文件以及為目錄提供"尾斜杠"重定向
        mod_env (B) 允許Apache修改或清除傳送到CGI腳本和SSI頁面的環境變量
        mod_filter (B) 根據上下文實際情況對輸出過濾器進行動態配置
        mod_imagemap (B) 處理服務器端圖像映射
        mod_include (B) 實現服務端包含文檔(SSI)處理
        mod_isapi (B) 僅限於在Windows平臺上實現ISAPI擴展
        mod_log_config (B) 允許記錄日誌和定制日誌文件格式
        mod_mime (B) 根據文件擴展名決定應答的行為(處理器/過濾器)和內容(MIME類型/語言/字符集/編碼)
        mod_negotiation (B) 提供內容協商支持
        mod_nw_ssl (B) 僅限於在NetWare平臺上實現SSL加密支持
        mod_setenvif (B) 根據客戶端請求頭字段設置環境變量
        mod_status (B) 生成描述服務器狀態的Web頁面
        mod_userdir (B) 允許用戶從自己的主目錄中提供頁面(使用"/~username")
        mod_auth_digest (X) 使用MD5摘要認證(更安全,但是只有最新的瀏覽器才支持)
        mod_authn_alias (E) 基於實際認證支持者創建擴展的認證支持者,並為它起一個別名以便於引用
        mod_authn_anon (E) 提供匿名用戶認證支持
        mod_authn_dbd (E) 使用SQL數據庫為認證提供支持
        mod_authn_dbm (E) 使用DBM數據庫為認證提供支持
        mod_authnz_ldap (E) 允許使用一個LDAP目錄存儲用戶名和密碼數據庫來執行基本認證和授權
        mod_authz_dbm (E) 使用DBM數據庫文件為組提供授權支持
        mod_authz_owner (E) 基於文件的所有者進行授權
        mod_cache (E) 基於URI鍵的內容動態緩沖(內存或磁盤)
        mod_cern_meta (E) 允許Apache使用CERN httpd元文件,從而可以在發送文件時對頭進行修改
        mod_charset_lite (X) 允許對頁面進行字符集轉換
        mod_dav (E) 允許Apache提供DAV協議支持
        mod_dav_fs (E) 為mod_dav訪問服務器上的文件系統提供支持
        mod_dav_lock (E) 為mod_dav鎖定服務器上的文件提供支持
        mod_dbd (E) 管理SQL數據庫連接,為需要數據庫功能的模塊提供支持
        mod_deflate (E) 壓縮發送給客戶端的內容
        mod_disk_cache (E) 基於磁盤的緩沖管理器
        mod_dumpio (E) 將所有I/O操作轉儲到錯誤日誌中
        mod_echo (X) 一個很簡單的協議演示模塊
        mod_example (X) 一個很簡單的Apache模塊API演示模塊
        mod_expires (E) 允許通過配置文件控制HTTP的"Expires:"和"Cache-Control:"頭內容
        mod_ext_filter (E) 使用外部程序作為過濾器
        mod_file_cache (X) 提供文件描述符緩存支持,從而提高Apache性能
        mod_headers (E) 允許通過配置文件控制任意的HTTP請求和應答頭信息
        mod_ident (E) 實現RFC1413規定的ident查找
        mod_info (E) 生成Apache配置情況的Web頁面
        mod_ldap (E) 為其它LDAP模塊提供LDAP連接池和結果緩沖服務
        mod_log_forensic (E) 實現"對比日誌",即在請求被處理之前和處理完成之後進行兩次記錄
        mod_logio (E) 對每個請求的輸入/輸出字節數以及HTTP頭進行日誌記錄
        mod_mem_cache (E) 基於內存的緩沖管理器
        mod_mime_magic (E) 通過讀取部分文件內容自動猜測文件的MIME類型
        mod_proxy (E) 提供HTTP/1.1的代理/網關功能支持
        mod_proxy_ajp (E) mod_proxy的擴展,提供Apache JServ Protocol支持
        mod_proxy_balancer (E) mod_proxy的擴展,提供負載平衡支持
        mod_proxy_connect (E) mod_proxy的擴展,提供對處理HTTP CONNECT方法的支持
        mod_proxy_ftp (E) mod_proxy的FTP支持模塊
        mod_proxy_http (E) mod_proxy的HTTP支持模塊
        mod_rewrite (E) 一個基於一定規則的實時重寫URL請求的引擎
        mod_so (E) 允許運行時加載DSO模塊
        mod_speling (E) 自動糾正URL中的拼寫錯誤
        mod_ssl (E) 使用安全套接字層(SSL)和傳輸層安全(TLS)協議實現高強度加密傳輸
        mod_suexec (E) 使用與調用web服務器的用戶不同的用戶身份來運行CGI和SSI程序
        mod_unique_id (E) 為每個請求生成唯一的標識以便跟蹤
        mod_usertrack (E) 使用Session跟蹤用戶(會發送很多Cookie),以記錄用戶的點擊流
        mod_version (E) 提供基於版本的配置段支持
        mod_vhost_alias (E) 提供大批量虛擬主機的動態配置支持

性能調優,模塊啟用/關閉
    (1)啟用壓縮
        LoadModule deflate_module modules/mod_deflate.so
    (2)啟用重寫
        LoadModule rewrite_module modules/mod_rewrite.so  
    (3)啟用默認擴展,支持在這裏進行修改httpd主要配置
        Include conf/extra/httpd-default.conf  
    (4)提供文件描述符緩存支持,從而提高Apache性能
        LoadModule file_cache_module modules/mod_file_cache.so
    (5)啟用基於URI鍵的內容動態緩沖(內存或磁盤)  
        LoadModule cache_module modules/mod_cache.so  
    (6)啟用基於磁盤的緩沖管理器
        LoadModule cache_disk_module modules/mod_cache_disk.so  
    (7)基於內存的緩沖管理器
        LoadModule socache_memcache_module modules/mod_socache_memcache.so 
    (8)屏蔽所有不必要的模塊
        #LoadModule authn_file_module modules/mod_authn_file.so  
        #LoadModule authn_dbm_module modules/mod_authn_dbm.so  
        #LoadModule authn_anon_module modules/mod_authn_anon.so  
        #LoadModule authn_dbd_module modules/mod_authn_dbd.so  
        #LoadModule authn_socache_module modules/mod_authn_socache.so  
        #LoadModule authn_core_module modules/mod_authn_core.so  
        #LoadModule authz_host_module modules/mod_authz_host.so  
        #LoadModule authz_groupfile_module modules/mod_authz_groupfile.so  
        #LoadModule authz_user_module modules/mod_authz_user.so  
        #LoadModule authz_dbm_module modules/mod_authz_dbm.so  
        #LoadModule authz_owner_module modules/mod_authz_owner.so  
        #LoadModule authz_dbd_module modules/mod_authz_dbd.so  
        LoadModule authz_core_module modules/mod_authz_core.so  
        LoadModule access_compat_module modules/mod_access_compat.so  
        #LoadModule auth_basic_module modules/mod_auth_basic.so  
        #LoadModule auth_form_module modules/mod_auth_form.so  
        #LoadModule auth_digest_module modules/mod_auth_digest.so 
    (9)已經過時屏蔽
        #LoadModule autoindex_module modules/mod_autoindex.so
    (10)用於定義缺省文檔index.php、index.jsp等
        LoadModule dir_module modules/mod_dir.so
    (11)用於定義記錄文件格式
        LoadModule log_config_module modules/mod_log_config.so
    (12)定義文件類型的關聯
        LoadModule mime_module modules/mod_mime.so
    (13)減少10%左右的重復請求
        LoadModule expires_module modules/mod_expires.so  
    (14)允許apache修改或清除傳遞到cgi或ssi頁面的環境變量
        LoadModule env_module modules/mod_env.so
    (15)根據客戶端請求頭字段設置環境變量,如果不需要則屏蔽掉
        #LoadModule setenvif_module modules/mod_setenvif.so
    (16)生成描述服務器狀態的頁面
        #LoadModule status_module modules/mod_status.so
    (17)別名
        LoadModule alias_module modules/mod_alias.so
    (18)url地址重寫模塊
        LoadModule rewrite_module modules/mod_rewrite.so
    (19)jk_mod 負載均衡調度模塊
        LoadModule    jk_module modules/mod_jk.so 
    (20)過濾模塊,使用緩存必須啟用過濾模塊
        LoadModule filter_module modules/mod_filter.so 
    (21)關閉服務器版本信息
        LoadModule version_module modules/mod_version.so
    (22)自動修正用戶輸入的url錯誤 
        LoadModule speling_module modules/mod_speling.so

apache2 擴展配置文件說明

httpd-autoindex.conf            自動索引配置
httpd-dav.conf                  WebDAV配置
httpd-default.conf              Apache的默認配置
httpd-info.conf                 mod_status, mod_info模塊配置
httpd-languages.conf            Apache多語言配置支持
httpd-manual.conf               在網站上提供Apache手冊
httpd-mpm.conf                  多路處理模塊配置文件
httpd-multilang-errordoc.conf   實現多語言的錯誤信息
httpd-ssl.conf                  SSL配置
httpd-userdir.conf              配置用戶目錄
httpd-vhosts.conf               虛擬主機配置

性能指標計算方法

提供下面這個公式,以供大家在平時或者日常需要進行的性能測試中作為一個參考。

計算平均的並發用戶數:C = nL/T

C是平均的並發用戶數;n 是 login session 的數量;L 是 login session 的平均長度;T指考察的時間段長度。

並發用戶數峰值:C’ ≈ C+3根號C

C’指並發用戶數的峰值,C就是公式(1)中得到的平均的並發用戶數。該公式的得出是假設用戶的 loginsession 產生符合泊松分布而估算得到的。
apache2自帶的壓力測試工具ab

 ab最常用的語法格式是這樣的
[root@localhost ~]# ab -n XXX -c YYY -k http://hostname.port/path/filename
    -n XXX:表示最多進行XXX次測試。也就是下載filename文件XXX次。
    -c YYY:客戶端並發連接個數。
    -k:啟用HTTP KeepAlive功能。默認不啟用KeepAlive功能。
ab必須安裝在客戶端上,並且客戶端機器配置性能要高些。

比如我們要對http://hostname:port/file.com下載10000次進行測試,並發訪問為60個,啟用HTTP KeepAlive功能,則訪問指令為
[root@localhost ~]# ab -n 10000 -c 60 -k http://hostname:port/file.htm

Java的壓力測試工具Jmeter

Jmeter 是apache開發的基於Java的壓力測試工具。
apache多路處理器MPM

目前apache2.4版本已經event MPM納入正式版,不再是實驗狀態。安裝時,apache已經自動將event MPM一起安裝進去,通過apachectl -l可以查看到event.c模塊。由此可以看到,event MPM已經成為apache默認的MPM工作模式。

(1)啟用MPM
Include conf/extra/httpd-mpm.conf 

(2)配置evnet MPM參數
<IfModule event.c>  
    #default 3  
    ServerLimit           15  

    #default 256 MaxRequestWorkers (2.3版本叫MaxClients) <= ServerLimit * ThreadsPerChild  
    MaxRequestWorkers            960  

    #default 3  
    StartServers          3  

    #default 64  
    ThreadsPerChild       64  

    #default 100000  ThreadLimit >= ThreadsPerChild  
    ThreadLimit           64  

    #default 75  
    MinSpareThreads       32  

    #default 400  MaxSpareThreads >= (MinSpareThreads + ThreadsPerChild)  
    MaxSpareThreads      112  

    #(2.3版本叫MaxRequestsPerChild)default 0, at 200 r/s, 20000 r results in a process lifetime of 2 minutes  
    MaxConnectionsPerChild 10000  
</IfModule>  

    1、StartServers:初始數量的服務器進程開始,默認為3個
    2、MinSpareThreads:最小數量的工作線程,保存備用,默認是75個線程
    3、MaxSpareThreads:最大數量的工作線程,保存備用,默認是250線程
    4、ThreadsPerChild:固定數量的工作線程在每個服務器進程,默認是25個
    5、MaxRequestWorkers:最大數量的工作線程,默認是400
    6、MaxConnectionsPerChild:最大連接數的一個服務器進程服務,默認為0,沒有上限限制,但是為了避免內存異常,影響穩定性,需要設置一個數值進行限制在修改配置後,需要停止htppd,再啟動httpd,  不能通過apacherestart生效,而是先 apache stop 然後再 apache start才可以生效。
    7、ServerLimit:ServerLimit是活動子進程數量的硬限制,它必須大於或等於MaxClients除以ThreadsPerChild的值。serverLimit最大20000,默認是16。只有在你需要將MaxClients和ThreadsPerChild設置成需要超過默認值16個子進程的時候才需要使用這個指令。不要將該指令的值設置的比MaxClients和ThreadsPerChild需要的子進程數量高。使用這個指令時要特別當心。如果將ServerLimit設置成一個高出實際需要許多的值,將會有過多的共享內存被分配。如果將ServerLimit和MaxClients設置成超過系統的處理能力,Apache可能無法啟動,或者系統將變得不穩定。RedHat Enterprise LinuxAS3.0Update2最大MaxClients只能設置到256。如果你需要設置其為更高,需要在MaxClients前面添加:ServerLimitxxx其中xxx不能少於MaxClients的數值。該設置方法適用於Apache 2.0系列。
    8、ThreadLimit:ThreadLimit是所有服務線程總數的硬限制,它必須大於或等於ThreadsPerChild指令。使用這個指令時要特別當心。如果將ThreadLimit設置成一個高出ThreadsPerChild實際需要很多的值,將會有過多的共享內存被分配。如果將ThreadLimit和ThreadsPerChild設置成超過系統的處理能力,Apache可能無法啟動,或者系統將變得不穩定。該指令的值應當和ThreadsPerChild可能達到的最大值保持一致。

計算event的相關參數

(1):計算服務器進程的平均內存
[root@localhost ~]# ps aux | grep ‘httpd‘ | awk ‘{print $6/1024 " MB";}‘

(2):計算正在通訊傳輸過程中的進程的平均內存,最好在一天之內不同的時間段內運行以下代碼
[root@localhost ~]# ps aux | grep ‘httpd‘ | awk ‘{print $6/1024;}‘ | awk ‘{avg += ($1 - avg) / NR;} END {print avg " MB";}‘

通過上面兩個指令計算出平均進程所使用的內存大小 ,再通過以下公式計算
MaxRequestWorkers(MaxClients) =  (Total RAM - RAM used for Linux, MySQL, etc.) / Average httpd process size.
      1、StartServers 30% of MaxRequestWorkers
      2、MinSpareThreads 5% of MaxRequestWorkers
      3、MaxSpareThreads10% of MaxRequestWorkers
      4、ServerLimit == MaxRequestWorkers
      5、MaxConnectionsPerChild 10000 (as conservative alternative to address possible problem with memory leaky apps)

event MPM 與worker MPM區別

可以支持比worker更高的並發數,主要安裝在類unix/linux上的工作模式。event mpm是worker mpm的變種,但是具有比worker MPM更好的並發性能。在event mpm模式下,ssl是不被支持的,他會被切換到worker mpm下處理。event mpm在apache2.4版本時才被從實驗狀態轉化成標準應用。
apache 緩存設置

apache涉及的緩存模塊有mod_cache、mod_disk_cache、mod_file_cache、mod_mem_cache。如果要使用緩存必須啟用這四個緩存模塊。
同時修改緩存設置後,必須重啟apache,刷新緩存,否則用戶訪問頁面不是最新頁面。

mod_cache、mod_disk_cache、mod_mem_cache、mod_file_cache關系
- apache緩存分為硬盤緩存和內存緩存
- mod_disk_cache mod_mem_cache 都依賴於mod_cache
- mod_file_cache是結合mod_cache使用,可以用於指定幾個頻繁訪問,但是變化不大的文件

配置硬盤緩存和內存緩存的緩存配置
<IfModule mod_cache.c>  
   #設置緩存過期時間,默認一小時  
   CacheDefaultExpire 3600  
   #設置緩存最大失效時間,默認最大一天  
   CacheMaxExpire 86400 CacheLastModifiedFactor 0.1 CacheIgnoreHeaders Set-Cookie CacheIgnoreCacheControl Off <IfModule mod_disk_cache.c>  
   #啟用緩存,並設定硬盤緩存目錄(url路徑)  
   CacheEnable disk /  
   #設定apache訪問用戶的緩存路徑,需要進行授權配置,如linux設置為777  
   CacheRoot /home/apache/cache  
   #緩存目錄深度  
   CacheDirLevels 5  
   #緩存目錄名稱字符串長度  
   CacheDirLength 5  
   #緩存文件最大值  
    CacheMaxFileSize 1048576  
   #緩存文件最小值   
   CacheMinFileSize 10 </IfModule> <IfModule mod_mem_cache.c>  

   #緩存路徑  
   CacheEnable mem /  

   #緩存對象最大個數  
   MCacheMaxObjectCount 20000  

   #單個緩存對象最大大小  
   MCacheMaxObjectSize 1048576  

   #單個緩存對象最小大小   
   MCacheMinObjectSize 10  

   #在緩沖區最多能夠放置多少的將要被緩存對象的尺寸  
   MCacheMaxStreamingBuffer 65536  

   #清除緩存所使用的算法,默認是 GDSF,還有一個是LRU  
   MCacheRemovalAlgorithm GDSF  

   #緩存數據最多能使用的內存  
   MCacheSize 131072 </IfModule> </IfModule>

文件緩存的應用
1、緩存文件:如果你的網站有幾個文件的訪問非常頻繁而又不經常變動,則可以在 Apache 啟動的時候就把它們的內容緩存到內存中(當然要啟用內存緩存系統),使用的是 mod_file_cache 模塊,有多個文件可以用空格格開,具體如下:
<IfModule mod_file_cache.c>  
     MMapFile /var/html/js/jquery.js  
</IfModule>  

2、緩存句柄:
<IfModule mod_file_cache.c>  
  CacheFile /usr/local/apache2/htdocs/index.html  
</IfModule>

apache壓縮配置

apache通過mod_deflate模塊實現頁面壓縮,要想進行頁面壓縮必須啟用以下兩個模塊

LoadModule deflate_module modules/mod_deflate.so  
LoadModule filter_module modules/mod_filter.so

頁面壓縮模塊配置

<ifmodule mod_deflate.c>  
#設定壓縮率,壓縮率1 -9, 6是建議值,不能太高,消耗過多的內存,影響服務器性能  
DeflateCompressionLevel 6  

AddOutputFilterByType DEFLATE text/plain  
AddOutputFilterByType DEFLATE text/html  
AddOutputFilterByType DEFLATE text/php  
AddOutputFilterByType DEFLATE text/xml  
AddOutputFilterByType DEFLATE text/css  
AddOutputFilterByType DEFLATE text/javascript  
AddOutputFilterByType DEFLATE application/xhtml+xml  
AddOutputFilterByType DEFLATE application/xml  
AddOutputFilterByType DEFLATE application/rss+xml  
AddOutputFilterByType DEFLATE application/atom_xml  
AddOutputFilterByType DEFLATE application/x-javascript  
AddOutputFilterByType DEFLATE application/x-httpd-php  
AddOutputFilterByType DEFLATE application/x-httpd-fastphp  
AddOutputFilterByType DEFLATE application/x-httpd-eruby  
AddOutputFilterByType DEFLATE image/svg+xml  
AddOutputFilterByType DEFLATE application/javascript  

#插入過濾器  
SetOutputFilter DEFLATE  

#排除不需要壓縮的文件  
SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary  
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip don’t-vary  
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary  
SetEnvIfNoCase Request_URI \.avi$ no-gzip dont-vary  
SetEnvIfNoCase Request_URI \.mov$ no-gzip dont-vary  
SetEnvIfNoCase Request_URI \.mp3$ no-gzip dont-vary  
SetEnvIfNoCase Request_URI \.mp4$ no-gzip dont-vary  
SetEnvIfNoCase Request_URI \.rm$ no-gzip dont-vary  
</ifmodule>

keepAlive

在HTTP 1.0中和Apache服務器的一次連接只能發出一次HTTP請求,而KeepAlive參數支持HTTP 1.1版本的一次連接,多次傳輸功能,這樣就可以在一次連接中發出多個HTTP請求。從而避免對於同一個客戶端需要打開不同的連接。很多請求通過同一個 TCP連接來發送,可以節約網絡和系統資源。

(1)keepAlive啟用場景
    如果有較多的js,css,圖片訪問,則需要開啟長鏈接
    如果內存較少,大量的動態頁面請求,文件訪問,則關閉長鏈接,節省內存,提高apache訪問的穩定性
    如果內存充足,cpu較好,服務器性能優越,則是否開啟長鏈接對訪問性能都不會產生影響

(2)keepAlive配置
    在Apache的配置文件httpd.conf中,設置:
    1、Timeout  60 默認為60s修改為30s
    2、KeepAlive on  設置為on狀態
    4、KeepAliveTimeout 默認為5s,如果值設置過高,由於每個進程都要保持一定時間對應該用戶,而無法應付其他用戶請求訪問,從而導致服務器性能下降。
    5、MaxKeepAliveRequests 100  如果設置為0表示無限制,建議最好設置一個值  
    把MaxKeepAliveRequests設置的盡量大,可以在一次連接中進行更多的HTTP請求。但在我們的測試中還發現,把 MaxKeepAliveRequests設置成1000,則評測的客戶端容易出現“Send requesttimed out”的錯誤,所以具體數值還要根據自己的情形來設置。

問題集錦

1、加載

LoadModule authz_core_module modules/mod_authz_core.so  
Invalid command ‘Require‘, perhaps misspelled or defined by a module not included in the server configuration`

2、配置信息後面不能跟隨註釋,註釋必須另起一行

CacheDefaultExpire takes one argument, The default time in seconds to cache a document

3、關鍵字錯誤 AddOutputFileByType 應該是

AddOutputFitlerByType  
Invalid command ‘AddOutputFileByType‘, perhaps misspelled or defined by a module not included in the server configuration

4、啟用

LoadModule setenvif_module modules/mod_setenvif.so  
Invalid command ‘SetEnvIfNoCase‘, perhaps misspelled or defined by a module not included in the server configuration

5、ifModule註釋不能跟在配置參數後面,否則會導致配置解析失敗

AH00526: Syntax error on line 558 of /usr/local/cp-httpd-2.4.18/conf/httpd.conf:
CacheDefaultExpire takes one argument, The default time in seconds to cache a document

參考文獻:

https://www.cnblogs.com/nongchaoer/p/6792767.html

https://blog.csdn.net/lu_yonggang/article/details/70053865

https://www.cnblogs.com/youxxn/p/8686357.html

http://drupal001.net/question/659

Apache優化及模塊的詳解