基本上,我们有一组微服务已部署到AWS托管的kubernetes集群中。我们想通过nginx中的网关配置来运行它们。
我们当前无法使用的配置看起来像这样-
upstream some-api1 {
server some-api1:80;
}
upstream some-api2 {
server some-api2:80;
}
upstream some-api3 {
server some-api3:80;
}
server {
listen 80;
server_name gateway.something.com;
location /api1 {
proxy_pass http://some-api1;
}
location /api2 {
proxy_pass http://some-api2;
}
location /api3 {
proxy_pass http://some-api3;
}
}
我们的服务是使用dotnet核心构建的,因此基础URL类似于http://some-api1/ {api / controllername}。尝试通过邮递员访问这些端点时,我总是得到404,这表明我无法解析这些映射。
但是我可以使用像这样的api的显式配置访问群集中的api(这是我不想做的事情)-
server {
listen 80;
server_name someapi1.something.com;
location /{
proxy_pass http://some-api1;
}
}..
如果有人可以阐明配置的问题或推荐最佳方法,将不胜感激。
答案 0 :(得分:1)
正如@Luminance所建议的那样,您看到到/ api1的流量流到该目标服务的基本路径上的some-api1 / api1而不是some-api1(这是您的应用程序将响应的)。在https://gist.github.com/soheilhy/8b94347ff8336d971ad0之后,您可以像这样重写该目标
location /api1 {
rewrite ^/api1(.*) /$1 break;
proxy_pass http://some-api1;
}