插件窝 干货文章 Nginx反向代理缓存配置,提升网站访问速度

Nginx反向代理缓存配置,提升网站访问速度

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

Nginx反向代理缓存配置指南

基本缓存配置

要启用Nginx作为反向代理并配置缓存,可以使用以下基本配置:

http {
    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_valid 200 302 10m;
            proxy_cache_valid 404 1m;
            proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;

            # 其他代理设置
            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 backend1.example.com;
        server backend2.example.com;
    }
}

配置详解

1. 定义缓存路径

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m use_temp_path=off;
  • /var/cache/nginx: 缓存文件存储路径
  • levels=1:2: 目录层级结构
  • keys_zone=my_cache:10m: 定义共享内存区域名称和大小(10MB)
  • inactive=60m: 60分钟内未被访问的缓存将被删除
  • use_temp_path=off: 不使用临时路径存储缓存文件

2. 缓存规则

proxy_cache_valid 200 302 10m;  # 成功响应缓存10分钟
proxy_cache_valid 404 1m;       # 404响应缓存1分钟

3. 高级缓存控制

# 当后端服务器出错时使用过期缓存
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;

# 缓存键设置
proxy_cache_key "$scheme$request_method$host$request_uri";

# 忽略Set-Cookie头,防止缓存被跳过
proxy_ignore_headers Set-Cookie;

# 或者处理Set-Cookie
proxy_cache_bypass $http_set_cookie;
proxy_no_cache $http_set_cookie;

性能优化建议

  1. 调整缓存大小

    • 根据服务器内存调整keys_zone大小
    • 监控缓存命中率调整缓存时间
  2. 缓存分区

    proxy_cache_path /var/cache/nginx/static levels=1:2 keys_zone=static_cache:10m inactive=1d use_temp_path=off;
    proxy_cache_path /var/cache/nginx/dynamic levels=1:2 keys_zone=dynamic_cache:20m inactive=1h use_temp_path=off;
    
  3. 启用gzip压缩

    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    
  4. 启用Brotli压缩(如支持)

    brotli on;
    brotli_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    

监控与调试

  1. 添加缓存状态头信息

    add_header X-Proxy-Cache $upstream_cache_status;
    
  2. 日志记录缓存状态

    log_format cache_log '$remote_addr - $remote_user [$time_local] '
                        '"$request" $status $body_bytes_sent '
                        '"$http_referer" "$http_user_agent" '
                        'Cache: $upstream_cache_status';
    
  3. 常用监控命令

    # 查看缓存目录大小
    du -sh /var/cache/nginx/
    
    # 查找缓存文件
    find /var/cache/nginx/ -type f | wc -l
    

完整优化示例

http {
    # 静态内容缓存
    proxy_cache_path /var/cache/nginx/static levels=1:2 keys_zone=static_cache:50m inactive=7d use_temp_path=off;

    # 动态内容缓存
    proxy_cache_path /var/cache/nginx/dynamic levels=1:2 keys_zone=dynamic_cache:100m inactive=1h use_temp_path=off;

    # 共享内存区域
    proxy_cache_path /var/cache/nginx/temp levels=1:2 keys_zone=temp_cache:10m inactive=10m use_temp_path=on;

    # 启用gzip压缩
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_min_length 1000;
    gzip_proxied any;

    server {
        listen 80;
        server_name example.com;

        # 静态资源缓存
        location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|svg)$ {
            proxy_pass http://backend;
            proxy_cache static_cache;
            proxy_cache_valid 200 302 7d;
            proxy_cache_valid 404 5m;
            proxy_cache_lock on;
            add_header X-Cache-Status $upstream_cache_status;
            expires 7d;
            access_log off;
        }

        # 动态内容缓存
        location / {
            proxy_pass http://backend;
            proxy_cache dynamic_cache;
            proxy_cache_valid 200 302 10m;
            proxy_cache_valid 404 1m;
            proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
            proxy_cache_lock on;
            proxy_cache_lock_timeout 5s;
            add_header X-Cache-Status $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;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }

    upstream backend {
        least_conn;
        server backend1.example.com weight=5;
        server backend2.example.com;
        server backend3.example.com backup;
    }
}

通过合理配置Nginx反向代理缓存,可以显著提升网站访问速度,减轻后端服务器负载,并提高整体系统的可靠性和响应能力。