我在 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 作为卷后,一切都按预期运行。