Apache快取mod cache配置

2021-06-08 04:26:26 字數 3505 閱讀 7720

apache 的快取方式有兩種,一種是基於硬碟檔案的快取,由 mod_disk_cache 實現,另一種是使用記憶體快取,由 mod_mem_cache 實現,不過它們都是依賴 mod_cache 模組的,mod_cache 模組提供了一些快取配置的指令供它們使用,而 mod_file_cache 模組是搭配 mod_mem_cache 模組使用的,下面分別進行介紹。

1、基於硬碟檔案的快取

基於硬碟檔案儲存的快取由 mod_disk_cache 模組實現,先看個簡單的配置例子:

cachedefaultexpire 86400

cacheenable disk /

cacheroot /tmp/apachecache

cachedirlevels 5

cachedirlength 4

cachemaxfilesize 1048576

cacheminfilesize 10

把上面的配置加到 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 模組實現,還是看個簡單的配置吧,這樣比較直觀:-)

cacheenable mem /

mcachemaxobjectcount 20000

mcachemaxobjectsize 1048576

mcachemaxstreamingbuffer 65536

mcacheminobjectsize 10

mcacheremovalalgorithm gdsf

mcachesize 131072

簡單說一下上面一些指令的意思:

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:」中包含了「*」,不會被快取

4、其它一些指令的介紹

如果你的**有幾個檔案的訪問非常頻繁而又不經常變動,則可以在 apache 啟動的時候就把它們的內容快取到記憶體中(當然要啟用記憶體快取系統),使用的是 mod_file_cache 模組,具體如下:

有多個檔案可以用空格格開

mmapfile /var/www/html/index.html /var/www/html/articles/index.html

上面是快取檔案的內容到記憶體中,除此之外,還可以只快取檔案的開啟控制代碼到記憶體中,當有請求進來的時候,apache 直接從記憶體中獲取檔案的控制代碼,返回內容,和 mmapfile 指令很像,具體如下:

cachefile /var/www/html/index.html /var/www/html/articles/index.html

上面兩個指令所快取的檔案如果有修改的話,必須重啟 apache 或使用 graceful 之類的方式強制使 apache 更新快取資料,否則當使用者訪問的時候獲取的不是最新的資料。

有時候需要根據某些特殊的頭部資訊來決定是否進行快取,則可以使用如下指令:

當頭部資訊中包含 set-cookie 時則跳過不進行快取操作

cacheignoreheaders set-cookie

有時候需要快取的時候跳過 url 中的查詢字串?使用如下指令:

cacheignorequerystring on

apache 的快取系統不僅可以快取伺服器本身的檔案,也可以快取通過**得到的內容,對了,apache 可以像 squid 一樣做**,而且做的還不錯,下篇文章就介紹一下 apache 的**功能吧。善用 apache 的快取功能,可以讓你的**速度提公升不少。做為乙個**來說,雖然可用的各種快取方案很多,但在 web 伺服器層做快取的效率還是很值得一試的。

Apache快取系統

apache 從2.0開始就已經可以使用快取模組了,不過在2.0的時候還是實驗性的,到了2.2已經完全可以放心的使用。apache的快取實現主要依靠 mod cache mod disk cache mod file cache 及mod mem cache。只需在配置編譯的時候加上引數 enabl...

Apache快取mod cache配置

apache 的快取方式有兩種,一種是基於硬碟檔案的快取,由 mod disk cache 實現,另一種是使用記憶體快取,由 mod mem cache 實現,不過它們都是依賴 mod cache 模組的,mod cache 模組提供了一些快取配置的指令供它們使用,而 mod file cache ...

Apache快取相關配置

小編今天來總結下 apache的快取模組相關資訊 硬碟快取 mod disk cache,依賴 mod cache 模組 記憶體快取 mod mem cache,依賴 mod cache 模組 檔案快取 mod file cache 搭配 mod mem cache 模組使用 1 硬碟快取 配置例子...