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

我需要在NGINX中创build一个代理重写,其中重写URL由请求的URI中包含的数据组成。 例如:

鉴于url:

http:// proxyhost:5555 / go / 222.222.222.222 / action / etc

重写应该是:

http:// 222.222.222.222:6666 / action / etc

这在NGIX中可能吗?

我可以在Apache的httpd上做到这一点,但到目前为止我还没有想出如何在nginx上做到这一点

(特定于Apache的例子):

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

这个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地址。 正则expression式匹配一个IP地址。 如果你愿意的话,它可以或多或less地具体化。

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