防止 nginx proxy_pass 302

防止 nginx proxy_pass 302

我的服务器上定义了两个服务器块来执行各种重定向。在下面的简化示例中,发出了 302 重定向。我想将此请求透明地代理给用户。

我怎样才能做到这一点?

当我使用定义为 200 的位置块时,location =/按预期发出。

http {
    server {
        server_name acme;
        listen 80;
        include mime.types;

        # http://acme/web/style.css -> http://127.0.0.1:8080/web/style.css
        location ~^/web/.*$ {
            proxy_pass http://127.0.0.1:8080;
        }

       # http://acme/style.css -> http://127.0.0.1:8080/acme/style.css
       location ~^(.+)$ {
           proxy_pass http://127.0.0.1:8080/acme$1;
       }
    }
}

答案1

可以nginx拦截 302 响应代码并在内部进行处理。我设置了一个使用以下方法的测试场景:

location /some/uri/ {
    error_page 302 = @fallback;
    proxy_intercept_errors on;
    proxy_pass ...;
}
location @fallback {
    rewrite ^ /some/other/uri last;
}

这当然会是一种不考虑响应标头值的全面拦截,但这可能足以满足您的要求。请参阅了解更多信息。

相关内容