要实现Nginx反向代理缓存的实时更新,特别是针对网站静态资源,可以通过以下几种方式进行配置:
首先确保你的Nginx已经配置了反向代理缓存:
http {
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m inactive=60m use_temp_path=off;
server {
location / {
proxy_cache my_cache;
proxy_pass http://backend;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
}
}
}
在源服务器响应中添加适当的缓存控制头:
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 1h;
add_header Cache-Control "public, no-transform, must-revalidate";
add_header X-Cache-Status $upstream_cache_status;
}
为静态资源添加版本号或哈希值,强制浏览器获取新版本:
<script src="/js/app.js?v=12345"></script>
配置Nginx允许清除特定URL的缓存:
location / {
proxy_cache_purge PURGE from 127.0.0.1;
}
然后可以通过发送PURGE请求来清除缓存:
curl -X PURGE http://example.com/static/style.css
location / {
proxy_cache_bypass $http_cache_control;
proxy_no_cache $http_pragma $http_authorization;
}
location / {
proxy_cache_lock on;
proxy_cache_lock_timeout 5s;
}
http {
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=static_cache:10m inactive=24h max_size=1g use_temp_path=off;
server {
listen 80;
server_name example.com;
# 静态资源缓存
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
proxy_cache static_cache;
proxy_pass http://backend;
proxy_cache_key "$scheme$host$request_uri";
proxy_cache_valid 200 302 24h;
proxy_cache_valid 404 1h;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
# 允许浏览器缓存但允许代理服务器验证更新
add_header Cache-Control "public, max-age=86400, must-revalidate";
# 允许通过PURGE方法清除缓存
proxy_cache_purge PURGE from 127.0.0.1;
}
# 其他请求
location / {
proxy_pass http://backend;
}
}
}
X-Cache-Status
头来监控缓存命中情况curl -I
检查响应头确保缓存行为符合预期通过以上配置,你可以实现Nginx反向代理缓存的灵活控制,既能享受缓存带来的性能优势,又能确保静态资源的实时更新。