Ubuntu Apache緩存機制設置指南
Apache的緩存機制主要通過mod_cache(緩存核心模塊)和mod_cache_disk(磁盤緩存存儲模塊)實現,以下是詳細配置步驟及關鍵參數說明:
首先確保系統已安裝mod_cache和mod_cache_disk模塊(Ubuntu默認可能未啟用,但包通常已存在):
sudo apt update
sudo apt install apache2-mod-cache apache2-mod-cache-disk
使用a2enmod命令啟用模塊,使Apache加載緩存功能:
sudo a2enmod cache
sudo a2enmod cache_disk
sudo systemctl restart apache2 # 重啟Apache使模塊生效
緩存配置需添加到Apache配置文件中,可選擇全局配置(影響所有站點)或虛擬主機配置(僅影響特定站點):
創建或編輯/etc/apache2/conf-available/cache.conf(Debian/Ubuntu推薦方式),添加以下內容:
<IfModule mod_cache.c>
<IfModule mod_cache_disk.c>
# 啟用磁盤緩存,應用于根路徑(可根據需求修改為特定路徑,如/static/)
CacheEnable disk /
# 指定緩存文件存儲目錄(默認路徑,無需修改)
CacheRoot /var/cache/apache2/mod_cache_disk
# 緩存目錄結構設置(層級數+每層子目錄數,優化IO性能)
CacheDirLevels 2
CacheDirLength 1
# 緩存過期時間控制
CacheDefaultExpire 3600 # 默認過期時間(1小時)
CacheMaxExpire 86400 # 最大過期時間(1天)
CacheMinExpire 60 # 最小過期時間(1分鐘)
CacheLastModifiedFactor 0.5 # 最后修改時間權重(0~1,值越大越依賴修改時間)
# 忽略敏感頭信息(避免緩存動態內容)
CacheIgnoreHeaders Set-Cookie
CacheIgnoreNoLastMod On # 忽略Last-Modified頭(依賴其他機制)
CacheIgnoreHeaders Expires
CacheIgnoreHeaders Cache-Control
CacheIgnoreHeaders Pragma
# 緩存存儲策略(根據需求調整)
CacheStoreNoStore On # 不存儲Cache-Control: no-store的響應
CacheStorePrivate On # 存儲私有響應(如用戶會話)
CacheStoreRevalidate On # 啟用重新驗證(確保緩存新鮮度)
CacheValidate On # 強制驗證緩存有效性
CacheCleanInterval 300 # 緩存清理間隔(秒,可選)
</IfModule>
</IfModule>
若僅需為某個虛擬主機啟用緩存,編輯對應的配置文件(如/etc/apache2/sites-available/000-default.conf),在<VirtualHost>塊內添加:
<IfModule mod_cache.c>
<IfModule mod_cache_disk.c>
CacheEnable disk /
CacheRoot /var/cache/apache2/mod_cache_disk
CacheDirLevels 2
CacheDirLength 1
CacheDefaultExpire 3600
</IfModule>
</IfModule>
緩存目錄需由Apache用戶(www-data)擁有讀寫權限:
sudo mkdir -p /var/cache/apache2/mod_cache_disk
sudo chown -R www-data:www-data /var/cache/apache2/mod_cache_disk
sudo chmod -R 755 /var/cache/apache2/mod_cache_disk
若使用conf-available目錄配置,需啟用配置文件:
sudo a2enconf cache # 啟用cache.conf配置
sudo systemctl restart apache2 # 重啟Apache應用更改
使用curl命令檢查響應頭,確認緩存是否工作:
curl -I http://your-website.com
若返回結果中包含X-Cache: HIT或Cache-Control: max-age=3600,則表示緩存生效(HIT表示緩存命中)。
| 參數 | 作用 | 推薦值 |
|---|---|---|
CacheEnable disk / |
啟用磁盤緩存,/表示應用于所有路徑 |
根據需求修改(如/static/僅緩存靜態資源) |
CacheRoot |
緩存文件存儲目錄 | 默認/var/cache/apache2/mod_cache_disk |
CacheDirLevels |
緩存目錄層級數(優化IO) | 2~3(層級越多,目錄分布越均勻) |
CacheDirLength |
每層子目錄的最大數量 | 1~2(避免單個目錄文件過多) |
CacheDefaultExpire |
默認緩存過期時間(秒) | 3600(1小時) |
CacheMaxExpire |
最大緩存過期時間(秒) | 86400(1天) |
CacheIgnoreHeaders Set-Cookie |
忽略Set-Cookie頭(避免緩存動態會話) |
必須開啟 |
CacheStorePrivate On |
存儲私有響應(如用戶登錄頁) | 根據需求開啟 |
www-data用戶對CacheRoot目錄有寫權限,否則會導致緩存失敗。Set-Cookie、Authorization等頭信息的頁面(如登錄頁),需通過CacheIgnoreHeaders忽略。CacheDirLevels和CacheDirLength需根據服務器存儲性能調整(層級過多會影響查找速度,過少會導致單目錄文件過多)。CacheValidate On或CacheRevalidate On,確保緩存內容的新鮮度。