Nginx:是否可以根据 URL 和方法的正则表达式解析不同的服务?
Nginx: Is it possible to resolve to different services based on a regexp over the URL and method?
我搜索过但找不到任何方法,所以我想知道是否可行。
我有一个接受请求的服务 运行,一切正常。但是,我想在同一台机器上用不同的服务 运行 来回答其中一些请求。这些请求将发送给 some/path/{variable}/etc
和方法 POST
。
所以我想知道是否可以直接从 nginx 执行此操作而不增加任何开销。
我的第一个解决方案是创建一个不同的 API 来接收所有请求,如果它不是我想要拦截的请求,则只向原始服务发送代理请求。但这为每个响应增加了 200 到 500 毫秒,这在我们的用例中是不可接受的。
所以我认为通过nginx来解决会更快,但是我找不到方法甚至不知道是否可行。
如有任何帮助,我们将不胜感激。如果您有任何其他我可以测试或实施的想法或替代方案,也将受到欢迎。
编辑:根据 Ivan 的评论请求。
我们已经有 nginx 运行,通过 service1 处理所有请求。
我们想做的是:
if request.path is in the form of /path/{variable}/etc and request.method==POST:
serve using service2
else:
serve using service1
假设您的服务托管在同一台服务器上并且访问端口不同,使用 map
块链应该可以解决问题:
map $uri $service_by_uri {
~^/path/[\w]+/etc 127.0.0.1:10002; # service 2
default 127.0.0.1:10001; # service 1
}
map $request_method $service {
POST $service_by_uri; # select service according to the request URI
default 127.0.0.1:10001; # service 1
}
server {
...
proxy_pass http://$service;
...
}
我搜索过但找不到任何方法,所以我想知道是否可行。
我有一个接受请求的服务 运行,一切正常。但是,我想在同一台机器上用不同的服务 运行 来回答其中一些请求。这些请求将发送给 some/path/{variable}/etc
和方法 POST
。
所以我想知道是否可以直接从 nginx 执行此操作而不增加任何开销。
我的第一个解决方案是创建一个不同的 API 来接收所有请求,如果它不是我想要拦截的请求,则只向原始服务发送代理请求。但这为每个响应增加了 200 到 500 毫秒,这在我们的用例中是不可接受的。
所以我认为通过nginx来解决会更快,但是我找不到方法甚至不知道是否可行。
如有任何帮助,我们将不胜感激。如果您有任何其他我可以测试或实施的想法或替代方案,也将受到欢迎。
编辑:根据 Ivan 的评论请求。
我们已经有 nginx 运行,通过 service1 处理所有请求。
我们想做的是:
if request.path is in the form of /path/{variable}/etc and request.method==POST:
serve using service2
else:
serve using service1
假设您的服务托管在同一台服务器上并且访问端口不同,使用 map
块链应该可以解决问题:
map $uri $service_by_uri {
~^/path/[\w]+/etc 127.0.0.1:10002; # service 2
default 127.0.0.1:10001; # service 1
}
map $request_method $service {
POST $service_by_uri; # select service according to the request URI
default 127.0.0.1:10001; # service 1
}
server {
...
proxy_pass http://$service;
...
}