如何配置 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。
可以使用以下方式打开其他端口:
在以下文章中阅读更多内容:“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":[]}
通过 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。
可以使用以下方式打开其他端口:
在以下文章中阅读更多内容:“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":[]}