1. 程式人生 > >Apache 設定web 快取

Apache 設定web 快取

預設情況下,apache安裝完以後,是不允許被cache的。如果外接了cache或squid伺服器要求進行web加速的話,就需要在htttpd.conf裡進行設定,當然前提是在安裝apache的時候要啟用mod_cache的模組。
以下簡單介紹一下安裝與配置的步驟:
1.        apache版本:httpd-2.0.49.tar.gz
2.        安裝httpd-2.0.49.tar.gz:
# tar –zxvf httpd-2.0.49.tar.gz
# cd httpd-2.0.49
#./configure --enable-cache --enable-disk-cache --enable-mem-cache

#mke
#make install

3.        檢驗是否安裝了cache模組
/usr/local/apache2/bin/apachectl –l
如果有mod_cache.c
  mod_disk_cache.c
  mod_mem_cache.c
這3個模組,說明該apache可以支援cache了
4.更改httpd.conf的設定
vi /usr/local/apache2/conf/httpd.conf
在末尾新增上:
<IfModule mod_cache.c>

CacheForceCompletion 100
  CacheDefaultExpire 3600
  CacheMaxExpire 86400
  CacheLastModifiedFactor 0.1

</IfModule>

5.設定虛擬目錄
然後儲存退出。啟動apache

6.引數的解釋:
mod_cache:
CacheEnable: 啟動 mod_cache,其後接兩個引數。第一個引數指定快取的種類,應設為 mem (記憶體快取) 或 disk (磁碟快取) 之其一;第二個引數指定使用快取的 URI 路徑,如果對整個網站 (或虛擬主機) 進行快取,簡單指定為根目錄(/) 即可。
CacheForceCompletion: 這個值指定當 HTTP request 被取消時,內容的產生動作要完成的百分比;預設是 60(%)。
CacheDefaultExpire: 指定快取的預設過期秒數;預設值是一小時 (3600)。

CacheMaxExpire: 指定快取最大的過期秒數;預設值是一天 (86400)。
CacheLastModifiedFactor: 用來從迴應裡 Last Modified 資訊算出 expire date。
計算方式是:
expire period (過期時距) = 最後更新後至今的時間間距 * CacheLastModifiedFactor

expire date = 目前時間 + expire period
不過無論如何,過期時間不能超過 CacheMaxExpire 的設定值。

現在。如果用squid對該伺服器進行反向代理的話,就可以通過cache 實現web的加速了

編譯Apache時設定
./configure --prefix=/usr/local/httpd/ --enable-mods-shared=all --enable-so --enable-cache --enable-disk-cache --enable-mem-cache

Apache 的快取方式有兩種,一種是基於硬碟檔案的快取,由 mod_disk_cache 實現,另一種是使用記憶體快取,由 mod_mem_cache 實現,不過它們都是依賴 mod_cache 模組的,mod_cache 模組提供了一些快取配置的指令供它們使用,而 mod_file_cache 模組是搭配 mod_mem_cache 模組使用的,下面分別進行介紹。
1、基於硬碟檔案的快取
基於硬碟檔案儲存的快取由 mod_disk_cache 模組實現,先看個簡單的配置例子:
<IfModule mod_cache.c>
    CacheDefaultExpire 86400
    <IfModule mod_disk_cache.c>
    CacheEnable disk /
    CacheRoot /tmp/apacheCache
    CacheDirLevels 5
    CacheDirLength 4
    CacheMaxFileSize 1048576
    CacheMinFileSize 10
    </IfModule>
</IfModule>
把上面的配置加到 Apache 的 httpd.conf 檔案中,如果快取相關的模組都已經編譯進了 Apache 的核心,則無需載入模組,直接就能使用上面的指令。指令的詳細說明如下:
CacheDefaultExpire:設定快取過期的時間(秒),預設是1小時,只有當快取的文件沒有設定過期時間或最後修改時間時這個指令才會生效
CacheEnable:啟用快取,第1個引數是快取類弄,這裡當然是 disk了,第2個引數是快取路徑,指的是 url 路徑,這裡是快取所有的東西,直接寫上“/”即可,如“/docs”則只快取 /docs 下的所有檔案
CacheRoot:快取檔案所在的目錄,執行 Apache 的使用者(如daemon 或 nobody)要能對其進行讀寫,如果不清楚的話可以直接設定成 777,請手動建立該目錄並設定好訪問許可權
CacheDirLevels:快取目錄的深度,預設是3,這裡設定為5
CacheDirLength:快取目錄名的字元長度,預設是4,這裡設定為5
CacheMaxFileSize 和 CacheMaxFileSize:快取檔案的最大值和最小值(byte),當超過這個範圍時將不再快取,這裡設定為 1M 和 10bytes
基於硬碟檔案儲存的檔案基本上就這些內容,設定好後重啟 Apache 應該就能使用了。一切正常的話,可以在快取目錄下看到 Apache 自動建立的一些目錄和快取的資料檔案。
2、基於記憶體的快取
基於記憶體的快取主要由 mod_mem_cache 模組實現,還是看個簡單的配置吧,這樣比較直觀:-)
<IfModule mod_cache.c>
   <IfModule mod_mem_cache.c>
       CacheEnable mem /
       MCacheMaxObjectCount 20000
       MCacheMaxObjectSize 1048576
       MCacheMaxStreamingBuffer 65536
       MCacheMinObjectSize 10
       MCacheRemovalAlgorithm GDSF
       MCacheSize 131072
   </IfModule>
</IfModule>
簡單說一下上面一些指令的意思:
CacheEnable:啟用快取,使用基於記憶體的方式儲存
MCacheMaxObjectCount:在記憶體中最多能儲存快取物件的個數,預設是1009,這裡設定為20000
MCacheMaxObjectSize:單個快取物件最大為 1M,預設是10000bytes
MCacheMaxStreamingBuffer:在緩衝區最多能夠放置多少的將要被快取物件的尺寸,這裡設定為 65536,該值通常小於100000或 MCacheMaxObjectSize 設定的值
MCacheMinObjectSize:單個快取物件最小為10bytes,預設為1bytes
MCacheRemovalAlgorithm:清除快取所使用的演算法,預設是 GDSF,還有一個是LRU,可以查一下 Apache 的官方文件,上面有些介紹
MCacheSize:快取資料最多能使用的記憶體,單位是 kb,預設是100kb,這裡設定為128M
儲存重啟 Apache 基於記憶體的快取系統應該就能生效了,根據需要可以使基於記憶體的儲存或硬碟檔案的儲存方式一起使用,只要指明不同的URL路徑即可。
3、注意事項
使用快取需要注意如下事項:
要使用快取,必須使用指令 CacheEnable 啟用它,目前可用的快取型別為 disk 或 mem,禁止快取可以使用 CacheDisable,如 CacheDisable /private
待快取的 URL 返回的狀態值必須為: 200、203、300、301 或 410
URL 的請求方式必須是 GET 方式
傳送請求時,頭部中包含 “Authorization: ”的字串時,返回的內容將不會被快取
URL 包含查詢字串,如問號?後的那些東西,除非返回的內容包含“Expires:”,否則不會被快取
如果返回的狀態值是 200,則返回的頭部資訊必須包含以下的一種才會被快取:Etag、Last-Modified、Expires,除非設定了指令 CacheIgnoreNoLastMod On
如果返回內容的頭部資訊“Cache-Control:”中包含“private”,除非設定了指令 CacheStorePrivate On,否則不會被快取
如果返回內容的頭部資訊“Cache-Control:”中包含“no-sotre”,除非設定了指令 CacheStoreNoStore On,否則不會被快取
如果返回內容的頭部資訊“Vary:”中包含了“*”,不會被快取