![重写代理,其中目标主机 IP 在 URI 中传递](https://linux22.com/image/702566/%E9%87%8D%E5%86%99%E4%BB%A3%E7%90%86%EF%BC%8C%E5%85%B6%E4%B8%AD%E7%9B%AE%E6%A0%87%E4%B8%BB%E6%9C%BA%20IP%20%E5%9C%A8%20URI%20%E4%B8%AD%E4%BC%A0%E9%80%92.png)
我需要在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
语句中使用捕获的变量来完成的。