Redirect 另一个web服务器上具有重定向的Nginx反向代理

Redirect 另一个web服务器上具有重定向的Nginx反向代理,redirect,nginx,configuration,proxy,reverse-proxy,Redirect,Nginx,Configuration,Proxy,Reverse Proxy,系统的组成如下: 资料来源: : nginx服务器-A 第三方服务器-B 用户PC浏览器-C 服务器A和用户PC C连接在同一网络A中,但服务器A和第三方机器B连接在网络B中。 目标是通过服务器A从用户浏览器C访问第三方机器B。为了执行此操作,服务器A应执行第三方内容的反向代理。 Nginx服务器已在服务器A上安装和配置。反向代理的规则为: location ~* ^/3rdparty/(.*)___(.*)___(.*)___(.*)$ { proxy_pass https://$1.

系统的组成如下: 资料来源: :

nginx服务器-A 第三方服务器-B 用户PC浏览器-C 服务器A和用户PC C连接在同一网络A中,但服务器A和第三方机器B连接在网络B中。 目标是通过服务器A从用户浏览器C访问第三方机器B。为了执行此操作,服务器A应执行第三方内容的反向代理。 Nginx服务器已在服务器A上安装和配置。反向代理的规则为:

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
该配置适用于其他一些设置,但本例中的问题是:在第三方机器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上的Web服务器采用URL的主机名并附加重定向规则users/sign_in,这会导致浏览器请求以下URL:

https://192.168.237.208/users/sign_in
这在服务器A上不可用,实际上它在B=>上,我们暂时移动了http错误代码302。 是否有我们未应用的缺少的配置规则?或者应该更新/转发任何其他http请求头参数?

到192.168.237.222的后端连接对仅连接到192.168.237.208的客户端是透明的

当服务器B后端在重定向中发回a/users/sign_时,它将反向传播到客户端,客户端将其应用于他所连接的服务器,即服务器a网关/代理,导致在192.168.237.208上错误请求/users/sign_。 您需要记住重定向是传播回客户端并由客户端处理的,而不是网关/代理

我会做如下的事情:

location ~* ^/3rdparty/([0-9]{1-3})___([0-9]{1-3})___([0-9]{1-3})___([0-9]{1-3})(/.*)?$ {
    proxy_pass https://$1.$2.$3.$4$5$is_args$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;
}
详情:

修改正则表达式,使其也与后端IP地址中附加了/blah/blah的请求相匹配,并使用另一个变量$5在proxy_-pass指令的末尾复制粘贴它们 使用nginx嵌入变量而不是问号避免在没有参数传递到后端时将其包含在请求中 尝试改进正则表达式语法以快速而肮脏地匹配IP地址号,我提供给您的语法仍然会导致不正确的匹配,但至少比通配符更好 现在,您需要将服务器B 192.168.237.222上的客户端重定向到/3rdparty/192_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu222/users/sign_,其中是可以针对服务器a 192.168.237.208请求的位置,唯一的服务器客户端连接到并愉快地转发到正确的后端

==========

您还可以依赖nginx指令,而不是将其设置为off,并使您的后端服务器做出如下重定向回答https://192.168.237.221/users/sign_in. 然后将允许您根据192.168.237.208将这些代理答案重写为正确的URI

为此,请尝试类似watchout的方法,我仍在使用惰性IP地址掩码:

    proxy_redirect     ~*^https://([0-9]{3}).([0-9]{3}).([0-9]{3}).([0-9]{3})(/.*)?$ http://192.168.237.208/3rdparty/$1___$2___$3____$4$5;
我想知道在这种情况下,变量是否像和起作用:

    proxy_redirect     ~*^https://([0-9]{3}).([0-9]{3}).([0-9]{3}).([0-9]{3})(/.*)?$ http://192.168.237.208/3rdparty/$1___$2___$3____$4$5$is_args$args;

proxy_redirect的文档明确指出,当使用变量指定proxy_pass时,不能使用“default”参数,Aleksandar就是这种情况。我想这就是为什么它被直接关闭的原因。