一尘不染

Nginx作为缓存代理不缓存任何内容

linux

我正在尝试缓存静态内容,这些内容基本上位于虚拟服务器配置中的以下路径内。由于某些原因,文件没有被缓存。我在缓存目录中看到了几个文件夹和文件,但总是像20mb一样高或低。例如,如果要缓存图像,则将至少占用500mb的空间。

这是nginx.conf缓存部分:

** nginx.conf **
proxy_cache_path /usr/share/nginx/www/cache levels=1:2 keys_zone=static$
proxy_temp_path /usr/share/nginx/www/tmp;
proxy_read_timeout 300s;

这是默认的虚拟服务器。

**sites-available/default**
server {
    listen   80;

    root /usr/share/nginx/www;
    server_name myserver;
    access_log /var/log/nginx/myserver.log main;
    error_log /var/log/nginx/error.log;

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

    location ~* ^/(thumbs|images|css|js|pubimg)/(.*)$ {
            proxy_pass http://backend;
            proxy_cache static;
            proxy_cache_min_uses 1;
            proxy_cache_valid 200 301 302 120m;
            proxy_cache_valid 404 1m;
            expires max;
    }

    location / {
            proxy_pass http://backend;
    }
}

阅读 422

收藏
2020-06-07

共1个答案

一尘不染

确保您的后端不返回Set-Cookie标头。如果Nginx看到它,它将禁用缓存。

如果是这种情况,最好的选择是修复后端。如果无法固定后端,则可以指示Nginx忽略Set-Cookie标头

proxy_ignore_headers "Set-Cookie";
proxy_hide_header "Set-Cookie";

请参阅说明文件

proxy_ignore_header将确保进行缓存。proxy_hide_header将确保Cookie有效负载不包含在缓存的有效负载中。重要的是要避免通过NGINX缓存泄漏cookie。

2020-06-07