Nginx 是否可能缓存所有301
重定向请求proxy_pass
?
例如:
请求#1:客户端 A 请求 /some/path->发送到proxy_pass
->导致 301 重定向到/some/other/path
-> nginx 缓存此响应,因为它是 301 重定向。
请求 #2:客户端 B 请求 /some/path -> nginx 返回缓存的 301 重定向到/some/other/path
。
答案1
nginx 已经可以缓存 301 重定向。您可以使用proxy_cache_valid指示:
proxy_cache_valid 301 365d; # Cache permanent redirects for a whole year
答案2
我发现@Michael的答案帮助我解决了大部分问题,但是当我打开时proxy_cache
,它会自动使用和缓存文件Expires
。Cache-Control
所以我最终得到了这个解决方案。
proxy_cache_path /tmp/nginx levels=1:2 keys_zone=main-cache:8m max_size=1000m inactive=600m;
proxy_temp_path /tmp/nginx/tmp;
proxy_cache main-cache;
proxy_cache_valid 301 60m;
proxy_cache_key "$scheme://$host$request_uri";
proxy_ignore_headers X-Accel-Expires Expires Cache-Control;
答案3
如果你想要重定向全部,你可以使用以下方式:
location / {
proxy_pass http://127.0.0.1:8080/VirtualHostBase/https/$server_name:443/some/path/VirtualHostRoot;
}
rewrite
您的示例可能需要和的组合proxy_pass
:
location / {
rewrite ^(.*)$ /VirtualHostBase/https/$server_name:443/some/path/VirtualHostRoot$1 break;
proxy_pass http://127.0.0.1:8080;
}
警告:你得到了不同的重写redirect
效果:break
返回 301 而不是permanent
返回 302。
编辑
您需要在此模块上游使用proxy_cache_valid
指令:
proxy_cache_valid 301 1h;
警告,上游缓存相关指令的优先级高于proxy_cache_valid值,具体顺序为:
- X-Accel-Expires
- 过期/缓存控制
- proxy_cache_valid