Nginx 将位置重定向到外部主机,同时保留子路径、方法和标头

问题描述 投票:0回答:1

我正在尝试从原始服务器(

https://my-server1.com/api/old/subpath
)上的子路径位置永久重定向到外部主机的根目录,同时保留子路径(
https://my-server2.com/subpath
),HTTP方法(通常请求是POST请求)和标头(标头包括身份验证数据)。

在SO上出现了几个类似的问题之后,我一直在尝试以下方法:

1.

location ^/api/old(.*)$ {
    rewrite $scheme://my-server2.com$1 permanent;
}

...但是我在执行 POST 请求时收到 404

2.

location /api/old {
    rewrite ^/api/old(.*)$ $scheme://my-server2.com$1 permanent;
5

...但是我在执行 POST 请求时收到 405,我相信是因为 POST 请求变成了 GET

3.

location ~ ^/api/old(.*)$ {
    return 308 $scheme://my-server2.com$1;
}

...但是我在执行 POST 请求时收到 403,我相信该方法是可以的,但身份验证标头未转发

4.

location ~ ^/api/old(.*)$ {
    proxy_pass $scheme://my-server2.com$1;
}

...但我得到了 502(不知道到底为什么)。

哪一种是正确的方法,我在这里缺少什么?

nginx http-redirect http-headers vhosts
1个回答
0
投票

我发现了如何让方法 #4 工作以及为什么它产生 502。它需要一个 DNS 解析器才能工作。例如,可以使用 OpenDNS (208.67.222.222) 作为 DNS 解析器。

该指令将变为:

location ~ ^/api/spp(.*)$ {
    proxy_pass    $scheme://spp.etalab.gouv.fr$1;
    resolver      208.67.222.222;
}

但这并不理想,因为这是 100% 透明的,我仍然想知道是否有办法同时通知客户端永久重定向。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.