插件窝 干货文章 Nginx代理缓存更新配置,实时响应网站变化

Nginx代理缓存更新配置,实时响应网站变化

cache 缓存 proxy Nginx    来源:    2025-04-17

Nginx代理缓存实时更新配置方案

要实现Nginx代理缓存能够实时响应网站变化,需要合理配置缓存策略和更新机制。以下是详细的解决方案:

1. 基本缓存配置

首先,在nginx.conf或站点配置文件中设置基本的缓存参数:

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头

确保后端服务器返回适当的Cache-Control头:

location / {
    # ...
    proxy_ignore_headers Set-Cookie;
    proxy_hide_header Set-Cookie;

    # 遵循后端Cache-Control头
    proxy_cache_revalidate on;
    proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
}

后端应返回: - Cache-Control: no-cache - 每次验证内容是否变化 - Cache-Control: max-age=0 - 立即过期 - Cache-Control: must-revalidate - 必须重新验证

方法二:主动清除缓存

使用proxy_cache_purge模块:

  1. 安装ngx_cache_purge模块
  2. 配置:
location ~ /purge(/.*) {
    allow 127.0.0.1;
    allow 192.168.1.0/24;
    deny all;
    proxy_cache_purge my_cache "$scheme$request_method$host$1";
}

然后通过访问http://example.com/purge/uri-to-purge来清除特定URL的缓存。

方法三:版本化URL

在网站更新时使用版本化URL:

<link href="/css/style.css?v=12345" rel="stylesheet">

这样Nginx会将其视为新资源进行缓存。

3. 部分内容实时更新

对于动态内容,可以设置更短的缓存时间:

# 静态资源长缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    proxy_cache_valid 200 302 12h;
    # ...
}

# 动态内容短缓存
location /api/ {
    proxy_cache_valid 200 302 10s;
    # ...
}

4. 高级配置

使用X-Accel-Expires头

后端可以通过发送X-Accel-Expires头控制缓存:

proxy_cache_valid any 5m; # 默认值
proxy_ignore_headers X-Accel-Expires; # 不忽略此头

缓存锁定

防止多个请求同时更新缓存:

proxy_cache_lock on;
proxy_cache_lock_timeout 5s;

5. 测试与验证

添加调试头查看缓存状态:

add_header X-Cache-Status $upstream_cache_status;

6. 完整示例配置

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m use_temp_path=off;

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend;
        proxy_cache my_cache;
        proxy_cache_key "$scheme$request_method$host$request_uri";
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 404 1m;

        proxy_cache_revalidate on;
        proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;

        add_header X-Cache-Status $upstream_cache_status;
    }

    location ~ /purge(/.*) {
        allow 127.0.0.1;
        deny all;
        proxy_cache_purge my_cache "$scheme$request_method$host$1";
    }
}

通过以上配置,您可以实现Nginx代理缓存的灵活控制,既能享受缓存带来的性能优势,又能确保内容更新的及时性。