两个Nginx实例,侦听不同的端口,只有一个可通过域访问

时间:2018-02-24 20:28:29

标签: docker nginx docker-compose vps nginx-reverse-proxy

我使用docker-compose堆栈在我的个人VPS上运行。现在,我有一个堆栈:

  • Nginx(暴露端口443)
  • 幽灵(博客)
  • MySQL(适用于Ghost)
  • Adminer(适用于MySQL,暴露端口8080)

我想尝试使用Matomo分析软件,但我不想将它添加到我当前的堆栈中,直到我对它感到满意为止,所以我决定为Matomo分析创建第二个docker-compose堆栈:

  • Nginx(暴露端口444)
  • Matomo
  • MariaDB(适用于Matomo)
  • Adminer(适用于MariaDB,暴露端口8081)

在两个堆栈都运行的情况下,我可以在其适当的端口访问所有内容,但只能通过IP地址访问。如果我尝试使用我的域,它只能连接到第一个Nginx,一个暴露端口443.如果我在浏览器中尝试https://www.example.com:444,它就无法连接。如果我在浏览器中尝试https://myip:444,它会连接到暴露端口444的第二个Nginx实例,警告我SSL证书有问题(因为我连接到我的IP,而不是我的域),然后让我通过。

我想知道是否有人知道为什么会发生这种行为。我不熟悉设置VPS,使用Nginx代理其他托管服务等等。如果事实证明Nginx不能以这种方式使用,我很乐意听到关于我如何安排这个的建议。 (我是否必须一次只运行一个Nginx实例,我必须通过它代理其他所有内容?等等)

谢谢!

1 个答案:

答案 0 :(得分:0)

我通过对Cloudflare进行故障排除来解决这个问题。我在等待我的域名接受我的VPS而不是Cloudflare的名称服务器时发布了这个问题。完成后,我测试了它,它确实通过了https://example.com:444。这证明是Cloudflare封锁了我。

我发现this page解释说免费Cloudflare计划只支持几个端口,不包括端口444.如果我升级到专业计划,我会有这个选项。

因此,我可以得出结论,我的问题的解决方案是升级我的Cloudflare计划或合并两个docker-compose堆栈,以便我可以接受对端口443上的所有内容的请求。