【发布时间】:2019-09-15 11:07:59
【问题描述】:
系统的组件是
(来源:snag.gy)
:
- “nginx 服务器”-A
- “第三方服务器”-B
- “用户 PC”(浏览器)-C
服务器“A”和用户PC“C”连接在同一网络“网络A”中,但服务器“A”和第3方机器“B”连接在网络“网络B”中。 目标是通过服务器“A”从用户浏览器“C”访问第 3 方机器“B”。为了执行它,服务器“A”应该对第 3 方内容进行反向代理。 在服务器“A”上安装并配置了 Nginx 服务器。反向代理的规则是:
location ~* ^/3rdparty/(.*)___(.*)___(.*)___(.*)$ {
proxy_pass https://$1.$2.$3.$4?$args;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
使用我们想要为 URL 做反向代理的规则: http:///3rdparty/ => https:// 例如:
http:// 192.168.237.208/3rdparty/192___168___237___222 => https://192.168.237.222
实际上,我们希望附加到 URL 的所有内容都被重定向。 例如:
http://192.168.237.208/3rdparty/192___168___237___222/blah/blah => https://192.168.237.222/blah/blah
该配置适用于我们的其他设置,但在这种情况下的问题是:在第 3 方机器“B”上,有另一个 Web 服务器执行一些重定向:
https://192.168.237.222 => https://192.168.237.222/users/sign_in
所以,当我们把想要的 URI 放到浏览器中时,最终的结果是:
http://192.168.237.208/3rdparty/192___168___237___222
“B”上的网络服务器获取 URL 的主机名并附加重定向规则 (users/sign_in),这导致浏览器正在请求以下 URL:
https://192.168.237.208/users/sign_in
这在服务器“A”上不可用(实际上它在“B”上)=>我们得到了 http 错误代码 302(临时移动)。 是否缺少我们未应用的配置规则?还是应该更新/转发任何其他 http 请求头参数?
【问题讨论】:
标签: redirect nginx configuration proxy reverse-proxy