server {
...
location / {
proxy_pass http://backend;
# You may need to uncomment the following line if your redirects are relative, e.g. /foo/bar
#proxy_redirect / /;
proxy_intercept_errors on;
error_page 301 302 307 = @handle_redirects;
}
location @handle_redirects {
set $saved_redirect_location '$upstream_http_location';
proxy_pass $saved_redirect_location;
}
}
4条答案
按热度按时间iugsix8n1#
你可以使用
proxy_redirect
指令:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect
Nginx仍然会向客户端返回301/302,但是
proxy_redirect
会修改Location
头,客户端应该向Location
头中给出的URL发出新的请求。类似这样的东西应该会将后续的请求返回到nginx:
proxy_redirect http://upstream:port/ http://$http_host/;
个eqoofvh92#
我成功地解决了一个更一般的情况,即重定向位置可以是任何外部URL。
字符串
与您所描述的更接近的替代方法在ServerFault回答此问题时介绍:https://serverfault.com/questions/641070/nginx-302-redirect-resolve-internally
qfe3c7zg3#
如果您需要遵循多个重定向,请按如下所示修改Vlad的解决方案:
1.添加
字符串
转换为
location /
.1.添加
型
到
location @handle_redirects
部分。44u64gxh4#
关于
proxy_redirect
的更多信息,用于相对位置案例
字符串
/api/
前缀溶液
型