我尝试了多种建议,但都无济于事。当代理请求到客户端返回 307 时,我尝试执行重定向。我从上游客户端响应的 Location 标头中挑选要发送到的新端点,并可能将其设置为要发送到的新端点,然后将其发送回同一客户端,但通过不同的端点。但我的问题是,我似乎无法启动第二次重定向,因为我看不到任何从 nginx 发出或到达上游客户端的重定向。
我的 Nginx 配置的必要部分如下:
#staging server
location /staging/mmcallback {
allow 127.0.0.1/32;
allow XXXX;
allow XXXX;
deny all;
proxy_buffer_size 64k;
proxy_buffers 8 64k;
proxy_busy_buffers_size 128k;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host "YYYY.com";
proxy_pass https://staging/mmcallback;
proxy_intercept_errors on;
error_page 301 302 307 = @handle_redirects_staging;
}
#handle redirects for staging environment on client error
location @handle_redirects_staging {
set $saved_location '$upstream_http_location';
proxy_http_version 1.1;
proxy_pass_request_body on;
proxy_pass https://staging$saved_location;
}
staging
是已定义的上游服务器配置。我想要一个配置,当第一个位置返回 301/2/7 时,它会重定向到 Location 标头中返回的同一服务器上的第二个端点。是否缺少配置?或者什么都没有?
编辑:在 Nginx 日志中看到以下警告,希望有帮助吗?:
2020/09/09 12:19:56 [warn] 963#0: *1 upstream server temporarily disabled while connecting to upstream, client: X.X.X.X, server: _, request: "POST /staging/mmcallback/endpoint HTTP/1.1", upstream: "https://[IPV6::99]:443/mmcallback/endpoint", host: "Y.Y.Y.Y:8443"
敏感数据已屏蔽
答案1
nginx 指令proxy_redirect
这里有啥用处吗?
因此,如果您的代理返回一个301
到http://example.com/redirect
,并且您希望它真正转到https://example2.com/hello
,那么您将有一个条目:
proxy_redirect http://example.com/redirect https://example2.com/hello;
答案2
我最终重构了上游客户端上的代码以执行内部“重定向”,即不向 Nginx 返回重定向 http 代码,因此 Nginx 配置到目前为止保持不变,并且重定向正在内部上游发生。