node.js - nginx通过docker主机映射路由,对于每个路由,调用不同的容器

标签 node.js docker nginx routes nodes

我正在尝试通过 docker 主机映射路由,对于每个路由,调用不同的容器。

我有一个包含 2 个服务的 docker-compose,该服务位于 :5000 端口。我的 nginx.conf 映射如下代码:

location /template-api {

        rewrite ^/template-api/?(.*) /$1 break;
        proxy_pass         http://template-api:5000;
        proxy_redirect     off;
        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-Host $server_name;
    }

    location /api-plan  {
            rewrite ^/api-plan/?(.*) /$1 break;
            proxy_pass         http://api-plan:5000;
            proxy_redirect     off;
            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-Host $server_name;
    }

当我调用 localhost:8000/api-template/documentation 时,调用静态文件的路由,或者返回静态文件的路由。他在 localhost:8000/swaggerui 中返回错误,找不到文件。 发生该错误是因为 swagger ui 文件夹位于 localhost:8000/api-template/swaggerui 和 localhost:8000/api-plan/swaggerui

为了修复该错误,我添加到 ngix,映射 / 路由的conf:

server { 
listen 8000;

    access_log  /var/log/nginx/api.log;
    error_log   /var/log/nginx/api_error.log;
    server_name localhost;

    location / {
        proxy_pass         http://api-plan:5000;
        proxy_redirect     off;
        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-Host $server_name;

    }

现在,当我调用 localhost:8000/api-plan/documentation 时,会成功,但是,当我调用 localhost:8000/template-api/documentation 时,API 会重定向到 localhost:8000/api-plan/,从而导致路线错误。

最佳答案

试试这个:

server { 
    listen 8000;
    access_log  /var/log/nginx/api.log;
    error_log   /var/log/nginx/api_error.log;
    server_name localhost;

    location / {
        proxy_pass         http://$server_name:8080/swaggerUi;
        proxy_redirect     off;
        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-Host $server_name;

    }
    location /template-api {

            rewrite ^/template-api/?(.*) /$1 break;
            proxy_pass         http://template-api:5000;
            proxy_redirect     off;
            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-Host $server_name;
    }

    location /api-plan  {
            rewrite ^/api-plan/?(.*) /$1 break;
            proxy_pass         http://api-plan:5000;
            proxy_redirect     off;
            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-Host $server_name;
    }
}

关于node.js - nginx通过docker主机映射路由,对于每个路由,调用不同的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47944201/

相关文章:

node.js - nvm 代理设置配置文件

database - 如何在 docker 容器内的 Oracle 数据库上使用 sqlplus?

python-3.x - 如何使用任务来命中在 azure 批处理节点中运行的 flask 应用程序?

Nginx 第三方模块 subs_filter 已安装但不工作返回未知指令

node.js - 如何计算组聚合的评分?

javascript - 在控制台中显示附加的中间件功能

node.js - 如何在 Linux Docker 容器上安装 NPM

linux - 如何将 .Net 核心 docker 应用程序从 Windows 发布到 Linux 机器?

ssl - 无法验证第一个证书代理 nginx

docker - Nginx 上游不适用于 docker 部署堆栈