Nginx proxy_pass 层次结构

Nginx proxy_pass hierarchy

我 运行 nginx 在 docker 中使用 asp.net 网络服务。 如果我这样写我的 conf,我就无法到达例如http:///localhost/order-service/api
这导致“找不到您请求的资源”。
/hubs 端点正在运行。

upstream order-service {
    server order-service:5048;
}

# HTTP
server {
    listen        80;

    location = /order-service/hubs {
        proxy_pass http://order-service/hubs;
        ...
    }

    location /order-service {
        proxy_pass http://order-service;
        ...
    }
}

如果我把它改成:

upstream order-service {
    server order-service:5048;
}

# HTTP
server {
    listen        80;

    location = /order-service/hubs {
        proxy_pass http://order-service/hubs;
        ...
    }

    location /order-service/api {        <--- here is the change!!!
        proxy_pass http://order-service;
        ...
    }
}

我可以通过 http:/localhost/order-service

获取 api

但我还有其他网址,例如 order-service/ui 和 order-service/settings。 除了 order-service/hubs?

,我必须用什么来引导所有请求到订购服务

两个表达式:

location /order-service/ {
    proxy_pass http://order-service;
}

并且:

location /order-service/ {
    proxy_pass http://order-service/;
}

会产生完全不同的结果。

在第一种情况下,请求 /order-service/api 将被代理到上游:

http://order-service/order-service/api

在第二种情况下,同样的请求会被翻译成:

http://order-service/api

查看您的 location = /order-service/hubs 块,您可能需要第二种情况。

详情见this document