Ngx 反向代理缓存规则

upstream source-nginx {
    server 8.8.8.8:8080;
}

proxy_cache_path cache levels=1:2 keys_zone=cache:10m max_size=10g inactive=60m use_temp_path=off;

server {
        listen 11119;
        add_header Access-Control-Allow-Origin: *;
        add_header Access-Control-Allow-Methods: *;
        add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';

        access_log  /var/log/nginx/exc/agent-22222.access.log main;
        error_log  /var/log/nginx/exc/agent-22222.error.log;

        location / {
            proxy_pass http://source-nginx;
        }

        location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
        {
            proxy_ignore_headers Cache-Control;
            proxy_cache cache;                # 缓存路径
            proxy_cache_min_uses 1;           # 被请求 1 次以上时才缓存
            proxy_cache_revalidate on;        # 验证当前缓存的内容是否仍然有效
            proxy_cache_lock on;              # 启用,多个客户端请求的文件不在缓存中,只有第一个请求是通过原始服务器的。其余请求将等待第一个请求的缓存,然后从缓存中提取文件。
            proxy_cache_lock_timeout 1s;      # 等待缓存锁超时之后将直接请求后端,结果不会被缓存
            proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; # 指定在后端服务器在返回什么状态码的情况下可以使用过期的缓存
            proxy_cache_background_update on; # 指示当客户端请求已过期或正在从原始服务器更新的缓存
            proxy_cache_valid 200 206 304 301 302 1h;  # 根据返回状态码,缓存有效期为30分钟
            proxy_cache_key "$scheme$request_method$host$request_uri";  # 缓存格式 # proxy_cache_key $uri; #proxy_cache_key $host$uri$is_args$args;
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Accept-Encoding "";                       # 反向代理中,BR算法,需提前开启,设置优先使用 brotli, 告知后端:前端不接受 Gzip 编码
            add_header X-Proxy-Cache $upstream_cache_status;           # 添加缓存命中状态到客户端
            proxy_pass http://source-nginx;
        }
}

Last updated