如何让 Nginx 将 301 302 307 重定向到同一服务器上的新 URL

如何让 Nginx 将 301 302 307 重定向到同一服务器上的新 URL

我尝试了多种建议,但都无济于事。当代理请求到客户端返回 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这里有啥用处吗?

因此,如果您的代理返回一个301http://example.com/redirect,并且您希望它真正转到https://example2.com/hello,那么您将有一个条目:

proxy_redirect http://example.com/redirect https://example2.com/hello;

答案2

我最终重构了上游客户端上的代码以执行内部“重定向”,即不向 Nginx 返回重定向 http 代码,因此 Nginx 配置到目前为止保持不变,并且重定向正在内部上游发生。

相关内容