我有两个容器,其中一个容器运行 NGINX 作为其他几个容器的反向代理。另一个容器运行 Apache,并启用和配置了 SSL。我见过几个配置示例,据我所知,NGINX 代替 Apache 处理证书,而只是将其他所有内容通过管道传输到一些非 SSL Apache。
现在,我宁愿让 Apache 处理自己的证书,特别是因为它使我在管理它们时更加轻松(使用 dockerized letsencrypt,它从相关的 Apache 容器挂载卷并将证书放在所有正确的位置)。
问题是我找不到 NGINX 的任何示例配置来将所有内容透明地代理到 Apache 容器。
答案1
这是因为 nginx 无法做到这一点。
它可以终止 SSL 连接,但不能让其继续连接。
您至少有两个选择:
- 将 SSL 证书粘贴到 letsencrypt 容器和 nginx 容器之间共享的小型 Docker 卷中。在此过程中,您还可以让 nginx 拦截 Let's Encrypt 挑战,这可能会简化您的架构。
- 使用 haproxy 代替 nginx。与 nginx 不同,haproxy 能够传递 SSL 连接(并执行在容器化设置中有用的各种其他操作)。请注意,这需要 SNI 支持,因此这些网站将无法被不支持 SNI 的旧 Web 客户端访问。