插件窝 干货文章 Nginx反向代理、缓存及缓存清除实例分析

Nginx反向代理、缓存及缓存清除实例分析

缓存 proxy cache Nginx 549    来源:    2025-04-27

Nginx反向代理、缓存及缓存清除实例分析

一、Nginx反向代理配置

基本反向代理配置

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend_server;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

高级反向代理配置

upstream backend {
    server 192.168.1.100:8080 weight=5;
    server 192.168.1.101:8080;
    server 192.168.1.102:8080 backup;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # 连接超时设置
        proxy_connect_timeout 60s;
        proxy_read_timeout 60s;
        proxy_send_timeout 60s;

        # 缓冲区设置
        proxy_buffers 8 16k;
        proxy_buffer_size 32k;
    }
}

二、Nginx缓存配置

基本缓存配置

http {
    proxy_cache_path /var/cache/nginx 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;

            # 缓存控制头
            add_header X-Proxy-Cache $upstream_cache_status;
        }
    }
}

高级缓存配置

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:100m inactive=24h 
                 max_size=1g use_temp_path=off;

server {
    location / {
        proxy_cache my_cache;
        proxy_pass http://backend;

        # 缓存锁定,防止多个请求同时更新缓存
        proxy_cache_lock on;
        proxy_cache_lock_timeout 5s;

        # 缓存更新策略
        proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;

        # 缓存最小使用次数
        proxy_cache_min_uses 3;

        # 忽略客户端缓存控制头
        proxy_ignore_headers Cache-Control Expires Set-Cookie;
    }

    # 不缓存特定路径
    location /no-cache/ {
        proxy_pass http://backend;
        proxy_no_cache 1;
    }
}

三、Nginx缓存清除方法

1. 手动删除缓存文件

# 删除缓存目录
rm -rf /var/cache/nginx/*

# 然后重新加载Nginx
nginx -s reload

2. 使用Nginx的Purge模块

需要编译安装ngx_cache_purge模块。

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 来清除特定URI的缓存。

3. 使用第三方工具

可以使用如 nginx-cache-purge 等工具批量清除缓存。

四、缓存策略最佳实践

  1. 缓存静态内容:图片、CSS、JS等静态资源适合长期缓存
  2. 动态内容缓存:根据业务需求设置较短缓存时间
  3. 敏感数据:用户个人信息等不应缓存
  4. 缓存层级:可以设置多级缓存策略
  5. 监控缓存命中率:通过 $upstream_cache_status 监控缓存效果

五、常见问题及解决方案

1. 缓存不生效

  • 检查 proxy_cache 指令是否配置正确
  • 检查后端是否返回了 Cache-Control 头阻止缓存
  • 检查 proxy_cache_valid 设置是否合理

2. 缓存占用磁盘空间过大

  • 设置 max_size 参数限制缓存大小
  • 调整 inactive 参数让不常用的缓存自动过期
  • 定期清理缓存目录

3. 缓存更新不及时

  • 使用 proxy_cache_bypass 指令强制更新特定请求
  • 设置较短的缓存时间
  • 实现缓存清除机制

通过合理配置Nginx的反向代理和缓存功能,可以显著提高网站性能和用户体验,同时减轻后端服务器的负载压力。