Apache緩存mod_cache配置
Apache 的緩存方式有兩種,一種是基于硬盤文件的緩存,由 mod_disk_cache 實(shí)現(xiàn),另一種是使用內(nèi)存緩存,由 mod_mem_cache 實(shí)現(xiàn),不過它們都是依賴 mod_cache 模塊的,mod_cache 模塊提供了一些緩存配置的指令供它們使用,而 mod_file_cache 模塊是搭配 mod_mem_cache 模塊使用的,下面分別進(jìn)行介紹。
1、基于硬盤文件的緩存
基于硬盤文件存儲(chǔ)的緩存由 mod_disk_cache 模塊實(shí)現(xiàn),先看個(gè)簡(jiǎn)單的配置例子:
<IfModule mod_cache.c>
CacheDefaultExpire 86400
<IfModule mod_disk_cache.c>
CacheEnable disk /
CacheRoot /tmp/apacheCache
CacheDirLevels 5
CacheDirLength 5
CacheMaxFileSize 1048576
CacheMinFileSize 10
</IfModule>
</IfModule>
把上面的配置加到 Apache 的 httpd.conf 文件中,如果緩存相關(guān)的模塊都已經(jīng)編譯進(jìn)了 Apache 的核心,則無需加載模塊,直接就能使用上面的指令。指令的詳細(xì)說明如下:
CacheDefaultExpire:設(shè)定緩存過期的時(shí)間(秒),默認(rèn)是1小時(shí),只有當(dāng)緩存的文檔沒有設(shè)置過期時(shí)間或最后修改時(shí)間時(shí)這個(gè)指令才會(huì)生效
CacheEnable:?jiǎn)⒂镁彺妫?個(gè)參數(shù)是緩存類弄,這里當(dāng)然是 disk了,第2個(gè)參數(shù)是緩存路徑,指的是 url 路徑,這里是緩存所有的東西,直接寫上“/”即可,如“/docs”則只緩存 /docs 下的所有文件
CacheRoot:緩存文件所在的目錄,運(yùn)行 Apache 的用戶(如daemon 或 nobody)要能對(duì)其進(jìn)行讀寫,如果不清楚的話可以直接設(shè)置成 777,請(qǐng)手動(dòng)建立該目錄并設(shè)置好訪問權(quán)限
CacheDirLevels:緩存目錄的深度,默認(rèn)是3,這里設(shè)置為5
CacheDirLength:緩存目錄名的字符長度,默認(rèn)是4,這里設(shè)置為5
CacheMaxFileSize 和 CacheMaxFileSize:緩存文件的最大值和最小值(byte),當(dāng)超過這個(gè)范圍時(shí)將不再緩存,這里設(shè)置為 1M 和 10bytes
基于硬盤文件存儲(chǔ)的文件基本上就這些內(nèi)容,設(shè)置好后重啟 Apache 應(yīng)該就能使用了。一切正常的話,可以在緩存目錄下看到 Apache 自動(dòng)建立的一些目錄和緩存的數(shù)據(jù)文件。
2、基于內(nèi)存的緩存
基于內(nèi)存的緩存主要由 mod_mem_cache 模塊實(shí)現(xiàn),還是看個(gè)簡(jiǎn)單的配置吧,這樣比較直觀:-)
<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>
簡(jiǎn)單說一下上面一些指令的意思:
CacheEnable:?jiǎn)⒂镁彺?,使用基于?nèi)存的方式存儲(chǔ)
MCacheMaxObjectCount:在內(nèi)存中最多能存儲(chǔ)緩存對(duì)象的個(gè)數(shù),默認(rèn)是1009,這里設(shè)置為20000
MCacheMaxObjectSize:?jiǎn)蝹€(gè)緩存對(duì)象最大為 1M,默認(rèn)是10000bytes
MCacheMaxStreamingBuffer:在緩沖區(qū)最多能夠放置多少的將要被緩存對(duì)象的尺寸,這里設(shè)置為 65536,該值通常小于100000或 MCacheMaxObjectSize 設(shè)置的值
MCacheMinObjectSize:?jiǎn)蝹€(gè)緩存對(duì)象最小為10bytes,默認(rèn)為1bytes
MCacheRemovalAlgorithm:清除緩存所使用的算法,默認(rèn)是 GDSF,還有一個(gè)是LRU,可以查一下 Apache 的官方文檔,上面有些介紹
MCacheSize:緩存數(shù)據(jù)最多能使用的內(nèi)存,單位是 kb,默認(rèn)是100kb,這里設(shè)置為128M
保存重啟 Apache 基于內(nèi)存的緩存系統(tǒng)應(yīng)該就能生效了,根據(jù)需要可以使基于內(nèi)存的存儲(chǔ)或硬盤文件的存儲(chǔ)方式一起使用,只要指明不同的URL路徑即可。
3、注意事項(xiàng)
使用緩存需要注意如下事項(xiàng):
要使用緩存,必須使用指令 CacheEnable 啟用它,目前可用的緩存類型為 disk 或 mem,禁止緩存可以使用 CacheDisable,如 CacheDisable /private
待緩存的 URL 返回的狀態(tài)值必須為: 200、203、300、301 或 410
URL 的請(qǐng)求方式必須是 GET 方式
發(fā)送請(qǐng)求時(shí),頭部中包含 “Authorization: ”的字符串時(shí),返回的內(nèi)容將不會(huì)被緩存
URL 包含查詢字符串,如問號(hào)?后的那些東西,除非返回的內(nèi)容包含“Expires:”,否則不會(huì)被緩存
如果返回的狀態(tài)值是 200,則返回的頭部信息必須包含以下的一種才會(huì)被緩存:Etag、Last-Modified、Expires,除非設(shè)置了指令 CacheIgnoreNoLastMod On
如果返回內(nèi)容的頭部信息“Cache-Control:”中包含“private”,除非設(shè)置了指令 CacheStorePrivate On,否則不會(huì)被緩存
如果返回內(nèi)容的頭部信息“Cache-Control:”中包含“no-sotre”,除非設(shè)置了指令 CacheStoreNoStore On,否則不會(huì)被緩存
如果返回內(nèi)容的頭部信息“Vary:”中包含了“*”,不會(huì)被緩存
4、其它一些指令的介紹
如果你的網(wǎng)站有幾個(gè)文件的訪問非常頻繁而又不經(jīng)常變動(dòng),則可以在 Apache 啟動(dòng)的時(shí)候就把它們的內(nèi)容緩存到內(nèi)存中(當(dāng)然要啟用內(nèi)存緩存系統(tǒng)),使用的是 mod_file_cache 模塊,具體如下:
有多個(gè)文件可以用空格格開
MMapFile /var/www/html/index.html /var/www/html/articles/index.html
上面是緩存文件的內(nèi)容到內(nèi)存中,除此之外,還可以只緩存文件的打開句柄到內(nèi)存中,當(dāng)有請(qǐng)求進(jìn)來的時(shí)候,Apache 直接從內(nèi)存中獲取文件的句柄,返回內(nèi)容,和 MMapFile 指令很像,具體如下:
CacheFile /var/www/html/index.html /var/www/html/articles/index.html
上面兩個(gè)指令所緩存的文件如果有修改的話,必須重啟 Apache 或使用 graceful 之類的方式強(qiáng)制使 Apache 更新緩存數(shù)據(jù),否則當(dāng)用戶訪問的時(shí)候獲取的不是最新的數(shù)據(jù)。
有時(shí)候需要根據(jù)某些特殊的頭部信息來決定是否進(jìn)行緩存,則可以使用如下指令:
當(dāng)頭部信息中包含 Set-Cookie 時(shí)則跳過不進(jìn)行緩存操作
CacheIgnoreHeaders Set-Cookie
有時(shí)候需要緩存的時(shí)候跳過 URL 中的查詢字符串?使用如下指令:
CacheIgnoreQueryString On
Apache 的緩存系統(tǒng)不僅可以緩存服務(wù)器本身的文件,也可以緩存通過代理得到的內(nèi)容,對(duì)了,Apache 可以像 Squid 一樣做代理,而且做的還不錯(cuò),下篇文章就介紹一下 Apache 的代理功能吧。善用 Apache 的緩存功能,可以讓你的網(wǎng)站速度提升不少。做為一個(gè)網(wǎng)站來說,雖然可用的各種緩存方案很多,但在 Web 服務(wù)器層做緩存的效率還是很值得一試的。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。