nginx 缓存不同版本的同一个文件

nginx 缓存不同版本的同一个文件

我在 Nginx 上添加了缓存的默认设置。通常刷新时我会收到 304,但在缓存文件夹中还有其他文件,其版本为 02a9299b4f7a308b588544c1a735cc1e.0000000002、02a9299b4f7a308b588544c1a735cc1e.0000000004 等。

我假设相同的缓存条目应该用于相同的查询。但即使是在通常的请求中,它也会创建额外的文件。我尝试添加 proxy_ignore_headers Cache-Control 和 proxy_hide_header Cache-Control。但没用。

如何停止创建版本?

nginx.conf

http {
    proxy_cache_path /data/nginx/cache levels=2:2 keys_zone=cache_one:256m inactive=2d max_size=16G;
server{
    proxy_cache cache_one;
    proxy_cache_key "$uri";
    proxy_cache_min_uses 5;
    proxy_cache_methods GET HEAD;
    proxy_cache_valid 200 302 100m;
    proxy_cache_valid 404      1m;
    proxy_ignore_headers Cache-Control;
    proxy_hide_header Cache-Control;
    proxy_cache_valid any 30m;
    add_header Cache-Control "max-age=1000000";
}
}

要求

GET /path/x16.jpg HTTP/1.1
Host: host:443
Connection: keep-alive
Cache-Control: max-age=0
DNT: 1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.109 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
Cookie: __cfduid=d739d4158117bf7ef77bf107cd0817c181591547262
If-None-Match: "5ed595d0-2c594"
If-Modified-Since: Mon, 01 Jun 2020 23:57:04 GMT

答案1

问题是 docker 中的 nginx 使用不同的 uid 和 gid。它们无法在我的系统上的 cifs 和 fuse 挂载上更改。使用 /tmp 作为卷后,一切都按预期运行。

相关内容