一、Nginx 緩存模塊簡介
Nginx 主要通過以下兩個模塊實(shí)現(xiàn)緩存:?
?
核心原理:Nginx 作為反向代理,第一次請求后端服務(wù)器時,將響應(yīng)內(nèi)容緩存到本地磁盤 / 內(nèi)存;后續(xù)相同請求直接返回緩存內(nèi)容,無需再次訪問后端。二、配置步驟
1. 準(zhǔn)備工作
2. 全局緩存配置(http 塊)
在 Nginx 配置文件(通常為?/etc/nginx/nginx.conf
)的?http
?塊中,定義緩存區(qū)域和策略:
?
nginx ? ? ? ? ?http {
# 定義緩存區(qū)域(levels、keys_zone、max_size 為必填項)
proxy_cache_path /var/cache/nginx/cache # 緩存存儲路徑
levels=1:2 # 緩存目錄層級(1:2 表示兩層目錄,如 /a/b/cache_key)
keys_zone=my_cache:10m # 緩存鍵共享內(nèi)存區(qū)(名稱:大小,10m 表示占用 10MB 內(nèi)存)
max_size=10g # 緩存最大磁盤占用(超過后按策略淘汰)
inactive=60m # 緩存項在指定時間內(nèi)未被訪問則刪除(60分鐘)
use_temp_path=on; # 是否使用臨時路徑緩存(默認(rèn) on,建議保留)
# 其他全局配置(如 MIME 類型、日志等)...
}
?
?
關(guān)鍵參數(shù)說明:?
levels
keys_zone
max_size
proxy_cache_use_stale
?策略淘汰舊緩存。inactive
use_temp_path
3. 反向代理緩存配置(server/location 塊)
在具體的?server
?或?location
?塊中,啟用緩存并關(guān)聯(lián)到后端服務(wù)器:
?
nginx ? ? ? ? ?server {
listen 80;
server_name example.com;
location / {
# 反向代理到后端服務(wù)器(如 Node.js、PHP-FPM 等)
proxy_pass http://backend_server; # 后端地址,如 http://127.0.0.1:8080
# 啟用緩存并關(guān)聯(lián)全局緩存區(qū)域
proxy_cache my_cache; # 使用 http 塊中定義的 keys_zone 名稱(my_cache)
proxy_cache_key $scheme$host$request_uri; # 緩存鍵規(guī)則(基于協(xié)議、域名、URI)
# 緩存有效期配置(按響應(yīng)狀態(tài)碼設(shè)置不同緩存時間)
proxy_cache_valid 200 302 12h; # 成功響應(yīng)(200/302)緩存 12 小時
proxy_cache_valid 404 1m; # 404 錯誤緩存 1 分鐘
proxy_cache_valid any 5m; # 其他狀態(tài)碼默認(rèn)緩存 5 分鐘(可選)
# 緩存更新策略
proxy_cache_use_stale updating; # 緩存過期時,返回舊緩存并后臺更新
proxy_cache_background_update on; # 后臺異步更新緩存(需 Nginx 1.13.9+)
# 忽略后端返回的 Cache-Control 頭,強(qiáng)制使用 Nginx 配置
proxy_ignore_headers Cache-Control;
# 傳遞必要的請求頭(如 Cookie,按需開啟)
proxy_pass_request_cookie on;
}
}
?
?
關(guān)鍵參數(shù)說明:?
4. 高級配置:緩存分層與控制
三、緩存管理與監(jiān)控
1. 查看緩存狀態(tài)
在?location
?塊中添加?proxy_cache_status
?變量,返回緩存狀態(tài):
?
nginx ? ? ? ? ?location / {
# 其他配置...
add_header X-Cache $proxy_cache_status; # 響應(yīng)頭中添加緩存狀態(tài)
}
?
?
狀態(tài)值說明:?
?
示例響應(yīng)頭:?
http ? ? ? ? ?X-Cache: HIT
?
2. 清理緩存
Nginx 本身不提供內(nèi)置緩存清理接口,需借助第三方模塊或腳本:?
3. 監(jiān)控緩存命中率
通過 Nginx 日志或外部工具監(jiān)控緩存命中情況:?
四、最佳實(shí)踐與注意事項
1. 緩存策略優(yōu)化
2. 性能調(diào)優(yōu)
3. 高可用性架構(gòu)
五、示例配置文件
nginx ? ? ? ? ?# /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
http {
include mime.types;
default_type application/octet-stream;
# 全局緩存配置
proxy_cache_path /var/cache/nginx/cache
levels=1:2
keys_zone=my_cache:20m
max_size=20g
inactive=30m
use_temp_path=on;
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend; # 后端服務(wù)器組(需在 http 塊中定義 upstream)
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# 緩存配置
proxy_cache my_cache;
proxy_cache_key $scheme$host$uri$is_args$args; # 包含查詢參數(shù)
proxy_cache_valid 200 302 6h;
proxy_cache_valid 404 10m;
add_header X-Cache $proxy_cache_status;
# 禁止緩存帶 Cookie 的請求
if ($http_cookie ~* "sessionid") {
proxy_no_cache 1;
add_header Cache-Control "no-cache";
}
}
}
# 后端服務(wù)器組
upstream backend {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
}
?
六、常見問題排查
?
通過以上配置,Nginx 可高效實(shí)現(xiàn)服務(wù)器端緩存,顯著提升網(wǎng)站性能和后端負(fù)載能力。實(shí)際應(yīng)用中需結(jié)合業(yè)務(wù)場景動態(tài)調(diào)整緩存策略,并定期監(jiān)控緩存命中率和資源占用。