我的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;
}