首页 > 解决方案 > 如何配置 nginx 在 Jelastic 上公开多个服务?

问题描述

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

在此处输入图像描述

我只是点击了“新环境”,然后我选择了 nodejs。我添加了一个泊坞窗图像(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 也不起作用。

如果我用我的 mailhog 服务的 IP 替换 nodejs 应用程序的 IP,然后 mailhog 在端口 80 上运行。我不明白如何让 nodejs 应用程序在端口 80 上运行,而 mailhog 服务在端口 5000 上运行(或任何80 以外的其他端口)。

有人可以启发我吗?

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

location /mailhog {
                    proxy_pass http://10.102.8.96:8025/;
                    add_header Set-Cookie "SRVGROUP=$group; path=/";
                }

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

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

这次我做错了什么?

编辑

更明确地说,我放了以下清单,展示了 nginx 位置的第二个问题。

标签: nginxjelastic

解决方案


您的案例的完整位置列表如下:(请注意上游的 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":[]}

推荐阅读