gpt4 book ai didi

ruby-on-rails - 如何在 Nginx 服务器上的 AWS 中使用 Https?

转载 作者:太空宇宙 更新时间:2023-11-03 16:41:53 26 4
gpt4 key购买 nike

我无法在我的应用程序中使用 HTTPS。首先,我在具有弹性 IP 的 Route 53 上使用 A Type DNS,并且 http 可以正常工作,但是当我尝试在 https 上工作时,我尝试创建一个负载均衡器,并在 A 类型上使用别名,出现 503 错误。

我做到了:

1) 在我域的 DNS 面板 (registro.br) 中添加了 4 个 Amazon DNS:2) 在 Amazon Certificate Manager 中,我为我的域创建了一个证书;

3) 在安全组 - 入站选项卡中,我包含了 HTTPS (HTTPS - TCP - 443 - 0.0.0.0/0)

4) 我创建了一个 Classic Load Balancer 并包含了 2 个监听器:

  • HTTP - 端口 80
  • HTTPS - 端口 443 |实例协议(protocol) HTTP |实例端口 80 |关联我的证书(第 1 步 - ACM Amazon Certificate Manger)

5) 在 Amazon Route 53 - Hosted Zones 中,我在我的托管区域中添加了 2 条记录:

  1. CNAME www,值为 mydomain .com
  2. 键入 A IPv4 地址 |别名是 |别名目标:我的负载均衡器

在我看到的教程(youtube + 互联网)中,只有通过上述步骤,HTTPS 才能在 Amazon EC2 上运行。但是,这些教程不适用于 NGINX 和 Ruby On Rails。

一些打印品: Load Balancer Route 53

我的环境:

操作系统:Ubuntu 14.04.2 LTSruby -v: ruby​​ 2.2.2p95 (2015-04-13 修订版 50295) [x86_64-linux] rails -v: rails 4.2.3nginx -v: nginx/1.8.0


来自 AWS 支持的电子邮件:

我们看到 503 错误的原因是因为后端实例未通过 ELB 健康检查并且 ELB 将实例标记为不健康。如果没有健康的实例,ELB 不会将请求转发给后端实例,并返回 HTTP 503 错误代码。 (下面的健康主机计数指标链接)

因此,现在我们必须验证健康检查失败的原因。一旦我们解决了这个问题,ELB 就会将请求发送到您的后端 nginx 服务器。

查看一些内部日志,我可以看到您的后端实例正在为来自负载均衡器节点的健康检查请求返回 404 错误。因此,我对您的实例 34.234.9.186 进行了一些测试。

我注意到 autonomosapp.com.br 当前指向 IP 34.234.9.186。这是我发现的:curl http://ELASTIC IP/index.html - 响应 404 not found 错误(你也可以在浏览器上试试这个,你会看到 404 错误) curl http://autonomosapp。 com。 br/index.html - 响应 200 ok(成功响应)

虽然这两个请求都指向相同的 IP 和端口,但输出是不同的。如果您在 nginx 配置文件中配置了虚拟主机以根据主机 header 返回不同的网页,则可能会发生这种情况。 ELB 会向后端实例的私有(private) IP 地址发送健康检查请求,这些健康检查请求的 URL 类似于 http://172.31.95.37:80//index.html。因为,这些请求在主机 header 中没有“autonomosapp.com.br”,您的后端返回 404 错误。

注意:172.31.95.37是您的实例的私有(private)IP地址。

话虽如此,您必须以这样一种方式配置您的 nginx 服务器,它会为没有主机 header 的请求返回 200ok。

修改后,为了验证您是否设置正确,从同一 VPC 中的另一个 linux 实例运行以下命令。

命令:curl -Iv http://172.31.95.37:80//index.html

如果此命令返回 200 ok,则健康检查更有可能成功。如果他们仍然失败,请回复我。


更新:我尝试将 nginx 配置中的站点启用更改为“”,但错误仍然存​​在

最佳答案

我想错误只是来自您的 ELB 配置,
如果你真的想让你的 nginx 在你的 EC2 上使用 443 端口 你需要设置这种类型的 listener :

HTTPS - 端口 443 |实例协议(protocol) HTTPS |实例端口 443
而不是

HTTPS - Port 443 | Instance Protocol HTTP | INSTANCE PORT 80 |

或者您只需将 Nginx 配置为仅监听 80 端口,ELB 将签名并将 443 重定向到 80,并且一切都适用于 HTTPS。

关于ruby-on-rails - 如何在 Nginx 服务器上的 AWS 中使用 Https?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46695703/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com