插件窝 干货文章 Nginx反向代理缓存刷新配置,实时更新网站静态资源

Nginx反向代理缓存刷新配置,实时更新网站静态资源

cache 缓存 proxy Nginx 563    来源:    2025-04-16

Nginx反向代理缓存刷新配置指南

要实现Nginx反向代理缓存的实时更新,特别是针对网站静态资源,可以通过以下几种方式进行配置:

1. 基本缓存配置

首先确保你的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;
        }
    }
}

2. 实时更新方法

方法一:使用Cache-Control头部

在源服务器响应中添加适当的缓存控制头:

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;
}

方法二:使用版本化URL

为静态资源添加版本号或哈希值,强制浏览器获取新版本:

<script src="/js/app.js?v=12345"></script>

方法三:PURGE方法清除特定缓存

配置Nginx允许清除特定URL的缓存:

location / {
    proxy_cache_purge PURGE from 127.0.0.1;
}

然后可以通过发送PURGE请求来清除缓存:

curl -X PURGE http://example.com/static/style.css

方法四:使用proxy_cache_bypass

location / {
    proxy_cache_bypass $http_cache_control;
    proxy_no_cache $http_pragma $http_authorization;
}

方法五:使用proxy_cache_lock_timeout

location / {
    proxy_cache_lock on;
    proxy_cache_lock_timeout 5s;
}

3. 完整示例配置

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;
        }
    }
}

4. 最佳实践

  1. 版本控制:为静态资源使用内容哈希或版本号
  2. 缓存分层:对不同类型的资源设置不同的缓存时间
  3. 监控:添加X-Cache-Status头来监控缓存命中情况
  4. 测试:使用curl -I检查响应头确保缓存行为符合预期
  5. 日志:记录缓存命中/未命中情况以便调试

通过以上配置,你可以实现Nginx反向代理缓存的灵活控制,既能享受缓存带来的性能优势,又能确保静态资源的实时更新。