![NGINX 和 Node.js 缓存在所有子文件夹上返回相同的结果](https://linux22.com/image/645605/NGINX%20%E5%92%8C%20Node.js%20%E7%BC%93%E5%AD%98%E5%9C%A8%E6%89%80%E6%9C%89%E5%AD%90%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%8A%E8%BF%94%E5%9B%9E%E7%9B%B8%E5%90%8C%E7%9A%84%E7%BB%93%E6%9E%9C.png)
我们使用 NGINX 代理与在同一服务器上运行的 Node.js 实例的连接。如果未针对该位置启用缓存,则在某一层(即 /v1/streams/)会返回一个 2MB 的 json 文件。如果在 URL 中添加 ID(即 /v1/streams/98souisdlfj87),则只会返回该 2MB json 文件的一小部分。
如果我们通过添加指向 /v1/streams 的新位置来添加缓存,则所有请求都会返回 2MB 的 json 文件,无论文件夹深度如何。
这是我的配置的相关部分。
http {
proxy_cache_path /var/lib/nginx/cache levels=1:2
keys_zone=streams:10m
max_size=1g inactive=10h;
proxy_cache_key "$request_uri";
proxy_headers_hash_max_size 8192;
proxy_headers_hash_bucket_size 256;
proxy_ignore_headers "Set-Cookie";
}
server {
location /v1/ {
proxy_pass http://127.0.0.1:5001/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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 XNginX-Proxy true;
proxy_redirect off;
proxy_cache_bypass $http_upgrade;
}
location /v1/streams {
proxy_cache streams;
proxy_pass http://127.0.0.1:5001/streams/;
add_header X-Proxy-Cache $upstream_cache_status;
proxy_cache_valid 200 204 302 1d;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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 XNginX-Proxy true;
proxy_redirect off;
proxy_cache_bypass $http_upgrade;
}
}
答案1
我找到了答案。我遗漏了位置末尾的斜线。
location /v1/streams/ {
现在它可以工作了。