如何配置 nginx 以在 Jelastic 上公开多个服务?

How to configure nginx to expose multiple services on Jelastic?

通过 Jelastic 的仪表板,我创建了这个:

我刚刚点了"New environment",然后我选择了nodejs。我添加了 docker 图像(mailhog)。

现在,我希望我环境的端口 80 服务于 nodejs 应用程序。这是默认情况下。因此无事可做。

除此之外,我希望我的环境的端口 8080(或 80 以外的任何其他端口,例如端口 5000)服务于托管在 docker 图像上的 mailhog。为此,我将以下行添加到 nginx-jelastic.conf(就在为 nodejs 应用程序提供服务的第一台服务器之后):

server {
                listen *:8080;
                listen [::]:8080;
                server_name  _;

                 location / {
                        proxy_pass http://mailhog_upstream;
                }
        }

我也这样定义了 mailhog_upstream

upstream mailhog_upstream{
server 10.102.8.215;   ### DEFUPPROTO for common ###
    sticky path=/; keepalive 100;
}

如果我现在浏览我的环境的 8080 端口,然后我看到... nodejs 应用程序。如果我尝试 80 或 8080 以外的任何其他端口,我什么也看不到。放另一个 server_name 没有帮助。我尝试了几件事,但似乎没有任何效果。这是为什么?我在这里做错了什么?

然后我试图摆脱上面的mailhog_upstream,而是写

server {
    listen       *:5000;
    listen       [::]:5000;
    server_name  _;

    location / {
        proxy_pass http://10.102.8.215;
    }
}

浏览环境的5000端口也不行。

如果我将 nodejs 应用程序的 IP 替换为我的 mailhog 服务的 IP,则端口 80 上的 mailhog 运行s。我不明白如何制作 nodejs 应用程序 运行 在端口 80 上,mailhog 服务在端口 5000(或 80 以外的任何其他端口)上。

谁能赐教一下?

在所有这些失败之后,我尝试了另一个 ansatz。假设我的环境路径是 example.com/。我在上面尝试的是让 mailhog 在调用 example.com:5000 时工作,但我没有这样做。然后我尝试通过调用 example.com/mailhog 使 mailhog 可用。为了做到这一点,我摆脱了上面的所有修改,并在 nginx-jelastic.conf

中完成了当前服务器
location /mailhog {
                    proxy_pass http://10.102.8.96:8025/;
                    add_header Set-Cookie "SRVGROUP=$group; path=/";
                }

从某种意义上说,如果我知道浏览 example.com/mailhog,那么我会在页面上得到一些东西,但不是我想要的:它是没有任何样式的 mailhog 页面。另外,当我通过 example.com/mailhog/api/v2/messages 调用 mailhog 的 API 时,我得到了一个没有正文的成功响应,而我本应该收到

{"total":0,"count":0,"start":0,"items":[]}

这次我做错了什么?

编辑

为了更明确,我把下面的 manifest 展示了 nginx 位置的第二个问题。

默认打开以下端口:80、8080、8686、8443、4848、4949、7979。

可以使用以下方式打开其他端口:

  • endpoints - 将容器内部端口映射到随机外部 通过 Jelastic 共享 LB
  • Public IP - 提供对您的所有端口的直接访问 容器

在以下文章中阅读更多内容:“Container configuration - Ports". This one may also be useful:"Public IP vs Shared Load Balancer

您案例的完整位置列表如下: (请注意上游的URI,它们是不同的)

location /mailhog { proxy_pass http://172.25.2.128:8025/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "    upgrade"; }
location /mailhog/api { proxy_pass http://172.25.2.128:8025/api; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "    upgrade"; }

location /css { proxy_pass http://172.25.2.128:8025; }
location /js { proxy_pass http://172.25.2.128:8025; }
location /images { proxy_pass http://172.25.2.128:8025; }

适合我的应用程序

# curl 172.25.2.127/mailhog/api/v2/messages
{"total":0,"count":0,"start":0,"items":[]}