我在端口 80 上运行了一个反向代理,作为更新网络内虚拟机上的 Let's Encrypt 证书的“网关”。出于这个原因,这个反向代理每周在端口 80 上只暴露 5 分钟。我有多个域通过此服务器转发到它们的内部 IP 地址。这一切都运行正常,但是有一台服务器在端口 443 上暴露在互联网上。当我使用 https 向正确的域名发出请求时,一切都正常。当我使用其他域之一时,我当然会收到无效证书错误。这就是为什么我考虑通过反向代理路由端口 443 流量,这样我就可以阻止不针对在 443 上暴露并运行的一个域的流量。但是,Nginx 需要一个有效的证书,但我无法提供它,因为它在另一台服务器上。
我在端口 443 上运行的服务器是 Kerio Mailserver。也许我可以做些什么来强制只使用一个域名?
有办法处理这个问题吗?如果您想知道的话:其他服务器不需要公开。
答案1
我认为没有理由不能通过 NGINX 代理 HTTP 和 HTTPS 流量。因此,您可以:
- 保留并更新 NGINX 主机上的所有证书,
- 通过 HTTP 将请求代理到虚拟机。如果我理解正确的话,它们都在同一台物理主机上,因此纯文本流量只会通过虚拟网络接口,
- 始终保持 NGINX 上的 HTTP 端口开放,并使用它来更新证书和(HTTP)将普通流量重定向到 HTTPS 端口。
编辑:如果您还想加密 NGINX 和虚拟机之间的流量,或者正如您在评论中所说,您不想使用 NGINX 进行本地网络连接,则可以对内部服务器使用本地认证机构。
从您的角度来看,它更安全,因为本地 CA 比外部机构更值得信赖。您只需将其添加到本地网络中的所有计算机,就可以颁发长期证书,而无需每 60 天更新一次。
答案2
我按如下方法修复了这个问题:我首先在 Kerio VM 上安装了 nginx,并配置了反向代理路由端口 443 到 444(Kerio 现在所在的位置)。接下来,我在 VM 上创建了一个通配符 SSL 证书,并在 2 个主机上使用,1 个用于 Webmail 和整个 Kerio,1 个用于重定向指向我的公共 IP 的所有其他域名,而不会出现证书错误。
现在我要弄清楚的是如何真正解决 504 网关超时问题,而不是仅仅增加一个巨大的超时限制。希望 certbot 能够使用 DNS 质询进行续订而不会出现问题。
现在该睡觉了。