nginx - 如何配置 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 位置的第二个问题。
解决方案
您的案例的完整位置列表如下:(请注意上游的 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":[]}
推荐阅读
- python - 在 Python Jupyter Notebook 中显示所有错误输出行
- python - 在 python 中使用循环计算降雨应用
- outlook - 如果打开 Outlook 实例,Mailto 不起作用
- django - 在 django 模型选择字段中显示月份名称而不是月份编号(从 db 获取)
- java - Java 程序在执行 actionPerformed 中的每一行之前处于停顿状态
- ios - 在 iOS swift 中与 webrtc 进行屏幕共享
- blockchain - Solidity中构造函数有什么用
- swiftui - 在 SwiftUI 中对齐视图的高度
- c++ - 向量保存单个值而不是多个值
- google-cloud-iot - 如果网关设备失去与 Google IoT Core 的连接会怎样?