溫馨提示×

Ubuntu上Apache2配置緩存技巧

小樊
44
2025-10-23 10:39:14
欄目: 智能運維

Ubuntu上Apache2配置緩存技巧

1. 安裝與啟用必要模塊

Apache2的緩存功能依賴mod_cache(核心緩存模塊)和mod_cache_disk(磁盤緩存后端)模塊。在Ubuntu中,可通過以下命令快速啟用:

sudo a2enmod cache cache_disk  # 啟用模塊
sudo systemctl restart apache2  # 重啟Apache使模塊生效

若未安裝,可通過sudo apt install apache2-mod-cache apache2-mod-cache-disk安裝。

2. 基礎磁盤緩存配置

在Apache配置文件(如/etc/apache2/conf-available/cache.conf)中添加以下內容,啟用磁盤緩存并設置核心參數:

<IfModule mod_cache.c>
    <IfModule mod_cache_disk.c>
        CacheEnable disk /  # 對根路徑啟用緩存(可替換為特定路徑,如/static)
        CacheRoot "/var/cache/apache2/mod_cache_disk"  # 緩存文件存儲目錄(需確保Apache有讀寫權限)
        CacheDirLevels 2  # 緩存目錄層級(建議2-3層,避免單目錄文件過多)
        CacheDirLength 1  # 每層目錄名稱長度(1-2位,優化目錄結構)
        CacheDefaultExpire 3600  # 默認緩存過期時間(秒,默認1小時)
    </IfModule>
</IfModule>

啟用配置文件并重啟Apache:

sudo a2enconf cache  # 啟用conf-available中的cache.conf
sudo systemctl restart apache2
```。


### 3. 高級緩存規則優化
#### 3.1 特定路徑/文件類型緩存
通過`<Location>`或`<FilesMatch>`指令,針對靜態資源(如圖片、CSS、JS)或特定目錄設置更長的緩存時間:  
```apache
<IfModule mod_cache.c>
    <IfModule mod_cache_disk.c>
        # 緩存/static目錄下的所有內容,過期時間設為1天
        <Location "/static">
            CacheEnable disk
            CacheDefaultExpire 86400
            CacheIgnoreHeaders Set-Cookie  # 忽略Set-Cookie頭(避免緩存帶會話信息的頁面)
        </Location>

        # 緩存所有圖片、CSS、JS文件,過期時間設為1個月
        <FilesMatch "\.(jpg|jpeg|png|gif|css|js)$">
            CacheEnable disk
            CacheDefaultExpire 2592000
            CacheMaxExpire 3067200  # 最大過期時間(避免資源更新后長期不刷新)
        </FilesMatch>
    </IfModule>
</IfModule>
```。


#### 3.2 控制緩存行為
通過以下指令優化緩存策略,平衡性能與實時性:  
```apache
<IfModule mod_cache.c>
    <IfModule mod_cache_disk.c>
        CacheIgnoreNoLastMod On  # 即使資源未修改,也使用緩存(減少服務器請求)
        CacheLastModifiedFactor 0.5  # 根據Last-Modified頭計算過期時間(0.5表示50%的修改時間作為緩存時間)
        CacheStorePrivate On  # 緩存私有內容(如用戶個性化頁面)
        CacheStorePublic Off  # 不緩存公共內容(如新聞頁面,需根據實際情況調整)
        CacheRemoveHeaders Set-Cookie  # 刪除響應中的Set-Cookie頭(避免緩存帶會話的頁面)
    </IfModule>
</IfModule>
```。


### 4. 配置瀏覽器端緩存(Expires模塊)
通過`mod_expires`模塊設置HTTP響應頭,讓瀏覽器緩存靜態資源,減少重復請求:  
```apache
<IfModule mod_expires.c>
    ExpiresActive On  # 啟用Expires功能
    ExpiresDefault "access plus 1 week"  # 默認緩存時間(1周)
    ExpiresByType text/html "access plus 1 week"  # HTML頁面緩存1周
    ExpiresByType text/css "access plus 1 month"  # CSS文件緩存1個月
    ExpiresByType application/javascript "access plus 1 month"  # JS文件緩存1個月
    ExpiresByType image/jpeg "access plus 1 month"  # JPEG圖片緩存1個月
    ExpiresByType image/png "access plus 1 month"  # PNG圖片緩存1個月
</IfModule>

啟用配置文件并重啟Apache:

sudo a2enmod expires  # 啟用mod_expires
sudo systemctl restart apache2
```。


### 5. 驗證緩存生效
使用`curl`命令檢查響應頭,確認緩存是否生效:  
```bash
curl -I http://your-domain.com/static/image.jpg

若返回結果中包含以下頭部,則表示緩存配置成功:

Cache-Control: max-age=2592000, public  # 瀏覽器緩存時間
Expires: Wed, 21 Oct 2025 07:28:00 GMT  # 過期時間
ETag: "123456789"  # 資源標識(用于協商緩存)
```。


### 6. 監控與調優
#### 6.1 查看緩存命中率
通過Apache的`access.log`或`mod_cache`的統計功能(需開啟`CacheDetailHeader On`)監控緩存命中率,分析緩存效果。  

#### 6.2 調整緩存參數
- **增大緩存目錄層級**:若緩存文件過多(如超過10萬),可增加`CacheDirLevels`(如3層)和`CacheDirLength`(如2位),避免單目錄性能下降。  
- **調整過期時間**:根據資源更新頻率調整`CacheDefaultExpire`(如靜態資源設為1個月,動態內容設為1小時)。  
- **清理緩存**:手動清理緩存目錄(`/var/cache/apache2/mod_cache_disk`),或在配置中添加`CacheCleanInterval 300`(每5分鐘自動清理過期緩存)。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女