我正在尝试从原始服务器(
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(不知道到底为什么)。
哪一种是正确的方法,我在这里缺少什么?
我发现了如何让方法 #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% 透明的,我仍然想知道是否有办法同时通知客户端永久重定向。