【问题标题】:How to run my website as https which is running as Docker swarm cluster in AWS?如何将我的网站作为 https 运行,它在 AWS 中作为 Docker swarm 集群运行?
【发布时间】:2017-06-14 12:41:50
【问题描述】:

我正在研究 docker swarm 和 aws。我对此没有太多想法。 如果我的问题是错误的,请纠正我,并帮助我解决我的问题。

我的 docker swarm 集群在 AWS 的负载均衡器下运行。 我从 Amazon 证书管理器创建了一个证书,用于 https 到我的负载均衡器。

在监听器下的负载平衡器选项卡中,如果我将 https 设置为负载平衡器协议并将 http 设置为实例协议,如下所示,当我在浏览器中键入 https://website-url 时,它会自动重定向到 http。

LoadBalancerProtocol LoadBalancerPort InstanceProtocol InstancePort Cipher SSL Certificate HTTPS 443 HTTP 80 Change 6e7528d6-8261-4d61-b1d3-3c2548e1b575 (ACM) Change

但我希望网站以 https 而不是 http 运行。 所以我改变如下。即使实例端口及其协议为 443 和 https。

LoadBalancerProtocol LoadBalancerPort InstanceProtocol InstancePort Cipher SSL Certificate HTTPS 443 HTTPS 443 Change 6e7528d6-8261-4d61-b1d3-3c2548e1b575 (ACM) Change

但在此之后https://website-url 继续运行,浏览器没有任何响应。

经过一番搜索,我了解到 ACM 证书仅适用于负载均衡器,不适用于后端实例。

例如,我需要为 apache 启用 https。

docker swarm 集群有 1 个管理节点和 3 个工作节点。所有主机实例操作系统都是 Alpine 操作系统。节点内的容器是 Centos-7。 容器在集群中作为服务运行。

请指导我, 我是否需要在容器内或主机实例上为 apache 配置自签名证书。 我希望我的网站以 https 而不是 http 运行。

请告诉我需要哪些步骤。

谢谢

【问题讨论】:

    标签: amazon-web-services ssl https


    【解决方案1】:

    负载平衡器端口是人们与您的负载平衡器对话的端口,因此负载平衡器端口 80 和 443 是正确的。

    实例端口是负载均衡器与您的网络服务器通信的端口。在这种情况下,你们俩都应该是 80,除非您的网络服务器正在使用有效的 SSL 证书侦听 443(不是您使用 AWS 证书的情况。)

    然后在您的代码或网络服务器中,您需要检查 X-Forwarded-Proto 标头 http://docs.aws.amazon.com/elasticloadbalancing/latest/classic/x-forwarded-headers.html,如果它不是 https 则重定向到 https。 https://www.allcloud.io/how-to/how-to-force-https-behind-aws-elb/ 有几个例子。

    【讨论】:

    • 嗨 TheAnnihilator,谢谢你的好点。我查看了您提到的链接,并尝试在 docker 容器内的代码中的 .htaccess 文件中重写规则。但是当我通过浏览器https://instance-ip访问实例ip时没有响应。我现在该怎么办?
    • 如果您直接对您的实例 IP 执行 https,您需要确保您的 Web 服务器正在侦听端口 443,并且附加到您的实例的安全组允许 443。请记住,如果您通过 IP 连接到您的实例,然后 SSL 将无法工作,因为它需要是一个域名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 2015-02-18
    • 1970-01-01
    相关资源
    最近更新 更多