我需要在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
语句中使用捕获的变量来完成的。