NGINX - Regex into locations.conf 不起作用



我的nginx代理的配置有问题。我只是尝试使用regex,它在这里定义:https://underthehood.meltwater.com/blog/2017/12/12/lightweight-tests-for-your-nginx-api-gateway/

但什么都不管用。如果路径中有任何regex,我的服务器将不会启动。我试过了:

location ~ ^/tesla/(?<id>.*)$ {
proxy_pass http://localhost:8081/;
proxy_set_header        Host                  $host;
} 

location ~ ^/tesla/test/ {
proxy_pass http://localhost:8081/;
proxy_set_header        Host                  $host;
}

location ~* ^/tesla/test/ {
proxy_pass http://localhost:8081/;
proxy_set_header        Host                  $host;
}

什么都不管用。我的最终目标是从url中提取一个值,并执行以下操作:

location ~* ^/(<version>.*)/test/ {
proxy_pass http://localhost:8081/;
proxy_set_header        Host                  $host;
proxy_set_header        X-Forwarded-Prefix    $version;
}

更新(已解决(

多亏了理查德,我终于成功了。这是完整的代码:

location ~* ^/api/(?<version>.*)/(?<service>.*)(/.*/.*)$   {
proxy_pass  http://$service.localnetwork:8080$3;
proxy_set_header        Host                  $host;
proxy_set_header        X-Real-IP             $remote_addr;
proxy_set_header        X-Forwarded-For       $proxy_add_x_forwarded_for;
proxy_set_header        X-Forwarded-Prefix    /api/$version/$service;
proxy_set_header        msvc_name    $service;
proxy_set_header        msvc_version    $version;
}

不能在正则表达式location块中使用带有静态URI的proxy_pass,它会引发错误-请参阅Nginx错误日志。有关详细信息,请参阅本文档。

但是,您可以通过在proxy_pass语句中添加变量来构造要向上游发送的URI。在您的情况下,您可以在同一个正则表达式中捕获URI的其余部分。

例如:

location ~* ^/([^/]+)/test(/.*)$ {
proxy_pass http://localhost:8081$2;
proxy_set_header  Host                $host;
proxy_set_header  X-Forwarded-Prefix  $1;
}

最新更新