https 连接在我的 ec2 amazon linux 2 上为容器失败

问题描述

这两天我一直在努力解决我的问题。我有一个 ec2 实例 (AMI),它托管一个在 http (http connection to my server) 中运行良好的 docker 容器。我已按照本教程设置 https (SSL/TLS) 连接:set-up let's encrypt on my ec2 instance 在我的 ec2 实例上通过让我们加密(免费 SSL 证书)。它似乎有效,因为当我连接到 http://conv.carbonfreeconf.com/ 时,它会自动转到 https://conv.carbonfreeconf.com/(这是所需的行为)。但是,当我尝试通过 https (https://conv.carbonfreeconf.com:7000) 中的 7000 端口连接到容器时,它显示:ERR_SSL_PROTOCOL_ERROR 但它通过 http 工作。

你知道为什么它可以通过普通 URL 工作,但在我连接到特定端口后就不行吗?

强烈感谢任何帮助...

解决方法

因为我看到这也与Convergence有关,所以我会跳到这里(这里的维护者之一)。问题是 Apache httpd 是一个独立的 Web 服务器。您已将其设置为在端口 80 上为 http 提供服务,在 443 端口上为 https 提供服务。 Apache 服务器不知道您的 docker 容器在端口 7000 上运行。默认情况下,apache httpd 服务器仅提供其 www 目录中的 HTML 文件。运行 Convergence 的 docker 容器是一个完全独立于 apache 的进程。它们在不同的端口上运行,默认情况下不通信。简单地安装 apache 并让它在端口 80 和 443 上侦听将无助于将 HTTPS 应用于在端口 7000 上运行的 Convergence。

我看到您正在使用 apache 来让 Let's Encrypt 为 HTTPS 证书工作。我假设您想要的是这些 HTTP 证书也适用于 Convergence。如果是这样,您需要将 Apache 设置为反向代理。为此,您可能希望使用 mod_proxy。查看以下链接。

https://httpd.apache.org/docs/2.4/howto/reverse_proxy.html

本质上,apache 将接受端口 443 上的传入流量,然后将流量(内部到 linux 主机)转发到端口 7000 以进行 Convergence。根据您的设置方式,apache 正在提供的当前 Web 内容可以保留并仍然存在,或者被 docker 容器所作为服务器的内容所取代(或者通过使用基于路径的路由将两者结合起来)。>