插件窝 干货文章 如何实现Nginx的反向代理缓存配置

如何实现Nginx的反向代理缓存配置

cache 缓存 proxy Nginx 140    来源:    2025-04-10

Nginx反向代理缓存配置指南

Nginx的反向代理缓存功能可以显著提高网站性能,减少后端服务器负载。以下是详细的配置方法:

基本配置步骤

1. 在http上下文中定义缓存路径和参数

http {
    # 定义缓存路径和参数
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m use_temp_path=off;

    # 其他http配置...
}

参数说明: - /var/cache/nginx:缓存文件存储路径 - levels=1:2:目录层级结构 - keys_zone=my_cache:10m:共享内存区域名称和大小 - inactive=60m:60分钟内未被访问的缓存将被删除 - use_temp_path=off:禁用临时路径

2. 在server或location块中启用缓存

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend;
        proxy_cache my_cache;  # 使用前面定义的缓存区域

        # 缓存有效条件
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 404      1m;

        # 其他代理设置...
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

高级配置选项

1. 缓存键定义

proxy_cache_key "$scheme$request_method$host$request_uri$is_args$args";

2. 缓存绕过条件

# 当请求头中有Cache-Control: no-cache时绕过缓存
proxy_cache_bypass $http_cache_control;

# 当请求方法是POST时绕过缓存
proxy_cache_bypass $request_method = POST;

3. 缓存锁定

proxy_cache_lock on;
proxy_cache_lock_timeout 5s;

4. 缓存重新验证

proxy_cache_revalidate on;

5. 缓存过期前更新

proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;

完整示例配置

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

    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
    }

    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_bypass $http_pragma $http_authorization;
            proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
            proxy_cache_background_update on;
            proxy_cache_lock on;

            add_header X-Proxy-Cache $upstream_cache_status;

            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

验证和监控

  1. 验证缓存是否工作

    • 检查响应头中的X-Proxy-Cache字段
    • 可能的值为:HIT, MISS, BYPASS, EXPIRED
  2. 清除缓存

    • 手动删除缓存文件:rm -rf /var/cache/nginx/*
    • 使用第三方模块如ngx_cache_purge
  3. 监控缓存

    • 使用nginx -T检查配置
    • 查看缓存目录大小:du -sh /var/cache/nginx
    • 使用stracelsof监控文件操作

性能调优建议

  1. 根据可用内存调整keys_zone大小
  2. 为频繁访问的内容设置较长的缓存时间
  3. 对大文件考虑使用proxy_cache_min_uses减少磁盘I/O
  4. 在高负载环境下启用proxy_cache_lock防止缓存击穿

通过合理配置Nginx反向代理缓存,可以显著提高网站性能,减轻后端服务器压力。