重写代理,其中目标主机 IP 在 URI 中传递

重写代理,其中目标主机 IP 在 URI 中传递

我需要在NGINX重写 URL 由请求 URI 中包含的数据组成。例如:

给定 URL:

http://代理主机:5555/go/222.222.222.222/动作/等

重写内容如下:

http://222.222.222.222:6666/动作/等

在 NGIX 中这可能吗?

我可以在 apache httpd 上执行此操作,但到目前为止我还没有弄清楚如何在 nginx 上执行此操作

(Apache 具体示例):

RewriteEngine On
RewriteBase "/"
RewriteRule "^go/(.*)/action/(.*)$" "http://$1:6666/action/$2"  [P]

答案1

这个location块应该可以完成这个工作。

location ~ ^/go/([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})/(action/.+)$ {
    proxy_pass http://$1:6666/$2;
}

我在此假设目标主机始终指定为 IP 地址。正则表达式松散地匹配 IP 地址。如果您愿意,可以使其更具体或更不具体。

无论如何,这是在 nginx 中通过在location指令中使用正则表达式捕获,然后在proxy_pass语句中使用捕获的变量来完成的。

相关内容