【问题标题】:How to enable HTTPS on AWS Docker如何在 AWS Docker 上启用 HTTPS
【发布时间】:2020-10-02 10:25:37
【问题描述】:

你好,

我一直在努力在 AWS 上使用 HTTPS 运行单实例 Docker。

HTTP 访问正常,但我无法访问 HTTPS(谷歌浏览器显示“无法访问此站点”)。

这里我们有一个 Elastic Beanstalk 实例。所以没有负载均衡器,证书托管在实例上。

我遵循了这个教程:AWS HTTPS Single Instance Docker

实例工作正常,我的证书已正确上传,nginx 配置也已正确上传。 这是我到目前为止得到的:

  • 尝试将安全组设置为允许 TCP 443,但没有成功。
  • 尝试设置安全组以允许所有流量到任何地方,但没有成功。
  • 来自我的域名的 HTTP 访问正常,这让我相信这不是 DNS 问题。
  • HTTPS 访问正在使用来自实例的 curl,因此 nginx 配置对我来说看起来不错(日志访问正常工作)。
  • 当我使用 HTTPS 访问我的域名时,/var/log/nginx/access.log 没有显示任何结果。



这是我的安全组值

Port range    Protocol    Source                    Security groups
80            TCP         sg-03d37000000000000      MY_SECURITY_GROUP
All           All         0.0.0.0/0                 MY_SECURITY_GROUP
All           All         ::/0                      MY_SECURITY_GROUP
443           TCP         0.0.0.0/0                 MY_SECURITY_GROUP



当我在 HTTPS 中点击实例 nginx 时

(不安全是因为证书域名不是127.0.0.1,API结果正确)

[ec2-user@ip-123-345-67-89 nginx]$ curl --insecure https://127.0.0.1
{"status":"ok","api":"sdk"}



这是我在尝试访问网站时从谷歌浏览器得到的结果 Google Chrome showing "This site can't be reached"



这是来自 nginx 访问的日志

[ec2-user@ip-123-345-67-89 nginx]$ tail -f /var/log/nginx/access.log
AWS_IP    - - [01/Oct/2020:14:02:48 +0000] "GET / HTTP/1.1" 200 56 "-" "ELB-HealthChecker/2.0"                               "-"
MY_IP     - - [01/Oct/2020:14:02:50 +0000] "GET / HTTP/1.1" 304 0  "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) ..." "123.345.67.89"
AWS_IP    - - [01/Oct/2020:14:02:57 +0000] "GET / HTTP/1.1" 200 56 "-" "ELB-HealthChecker/2.0"                               "-"
AWS_IP    - - [01/Oct/2020:14:03:03 +0000] "GET / HTTP/1.1" 200 56 "-" "ELB-HealthChecker/2.0"                               "-"
127.0.0.1 - - [01/Oct/2020:14:03:10 +0000] "GET / HTTP/1.1" 200 27 "-" "curl/7.61.1"                                         "-"
AWS_IP    - - [01/Oct/2020:14:03:12 +0000] "GET / HTTP/1.1" 200 56 "-" "ELB-HealthChecker/2.0"                               "-"



到目前为止,我认为我的 AWS 配置和实例之间存在问题,因为一切都在实例上运行。

但 AWS Config 对我来说看起来不错,所以我对问题的根源没有其他想法。

任何帮助将不胜感激。 非常感谢您阅读所有这些内容。

【问题讨论】:

  • 您能说明一下您的设置吗?我看到您有ELB-HealthChecker,所以您正在使用应用程序负载均衡器? “安全组值”适用于 ALB 还是您的实例?如果您有 ALB,您在 ALB 或实例上的何处部署 SSL 证书?
  • 嗨@Marcin,对不起,我认为single instance 已经够清楚了(我不是AWS 专家)。我将单个实例与 Elastic Beanstalk 一起使用。所以没有负载均衡器,证书托管在实例上。基本上我遵循了这个教程:docs.aws.amazon.com/elasticbeanstalk/latest/dg/…
  • 您的日志显示来自“ELB-HealthChecker/2.0”的条目。如果没有负载均衡器,它从何而来?
  • 就是这样!谢谢你,小伙伴。在我的 Elastic Beanstalk 环境中,Configuration > Capacity 下的 environment type 设置为 Load Balanced。我将其更改为 Single Instance,它现在可以工作了。我的错误是猜测 Elastic Beanstalk 配置从 PHP(我以前的)到 Docker 是一样的。您可以将此作为答案发布,以便我解决此问题。
  • 没问题,谢谢。

标签: amazon-web-services nginx https


【解决方案1】:

基于 cmets。

问题是错误地使用了负载均衡的EB环境,而不是单实例造成的。

解决方案是在 EB 控制台中将负载均衡的 EB 环境更改为单实例环境。

【讨论】:

  • 我们如何在 AWS ECS 中启用 HTTPS 容器
  • @sks123245 你可以提出一个新的问题。但通常您需要在目标组设置中拥有自签名 ssl 证书和 HTTPS 协议。
猜你喜欢
  • 2019-12-05
  • 2020-10-04
  • 1970-01-01
  • 2017-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-29
  • 2017-12-19
相关资源
最近更新 更多