首页 > 解决方案 > 从 ECS 实例调用服务发现端点 [nginx, angular, express]

问题描述

我有一个角度应用程序,它使用 nginx 作为反向代理通过/api位置连接到后端服务器。我在一个作为服务的 ECS 实例上运行的 Docker 容器中有 Angular 应用程序,它将容器中的主机端口 80 绑定到 8080。

我已经启动了后端作为一个容器,通过 ECS 将 3000:3000 作为单独的服务公开。这一次,我使用 awsvpc 来启用使用 A 记录的此端点的服务发现。我正在重写传入的 url 以远程前缀:/api

现在,如果我尝试从 EC2 实例中 ping 后端服务(使用 curl),我就能收到响应。但是,我的 Angular 应用程序无法连接到后端服务。我认为这是 nginx.conf 文件中的配置问题(如下):

worker_processes  2;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       8080;
        server_name  localhost;
        root html/composite-app;
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            try_files $uri $uri/ /index.html;
        }

        location /api {
            rewrite /api/(.*) /$1  break;
            proxy_pass http://backend.local:3000;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

    include servers/*;
}

谁能指出我如何调试它的正确方向?我已经坚持了好几天了......我尝试使用桥接模式并硬编码容器的IP地址(172.17.0.2:3000)并且它运行良好。但是,我想使用服务发现路由。

标签: angularexpressnginxdevopsamazon-ecs

解决方案


推荐阅读