如何在Ngix服务器上的AWS中使用Https?

问题描述:

我无法使HTTPS在我的应用程序中工作。 首先,我在Route 53上使用了一个Type为DNS的Elastic Ip和http工程,但是当我试图在https上工作时,我试图创建Load Balancer,并在A类型上使用别名,发生503错误。如何在Ngix服务器上的AWS中使用Https?

我所做的:

1)在我的域名的DNS面板(registro.br)加4亚马逊DNS: 2)在亚马逊证书管理器,我创造了我的域名证书;

3)在安全组 - 入站标签,我包括HTTPS(HTTPS - TCP - 443 - 0.0.0.0/0)

4)我创建了一个经典负载平衡器和包括2个listners:

  • HTTP - 端口80
  • HTTPS - 端口443 |实例协议HTTP |实例端口80 |关联我的证书(步骤1 - ACM亚马逊证书管理器)

5)在亚马逊路线53 - 托管区域,我加了2条记录在我的托管区:

  1. CNAME WWW与价值MYDOMAIN .COM
  2. 类型A IPv4地址|别名是|别名目标:我的负载均衡器

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

一些打印: Load Balancer Route 53

我的环境:

操作系统:Ubuntu的LTS 14.04.2红宝石 -v:红宝石2.2.2p95(2015年4月13日修订50295)x86_64-的Linux] 导轨-v:Rails的4.2.3 nginx的-v:nginx的/ 1.8.0


EMAIL FROM AWS SUPPORT:

我们看到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未找到错误(你也可以在浏览器上试试这个,你会看到一个404错误) Curl http:// autonomosapp。 COM。 br /index.html - 响应200 OK(成功响应)

尽管这两个请求都指向相同的IP和端口,但输出却不同。如果你在你的nginx配置文件中配置了虚拟主机来根据主机头返回不同的网页,就会发生这种情况。 ELB将发送运行状况检查请求到后端实例的私有IP地址,并且这些运行状况检查请求的URL看起来像http:// 172.31.95.37:80 // index.html。由于这些请求在主机头中没有“autonomosapp.com.br”,您的后端将返回404错误。

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

这就是说,你必须配置你的nginx服务器的方式,它会返回200ok的请求没有主机头。

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

命令:卷曲-Iv HTTP:// 172.31.95.37:80 //index.html

如果此命令返回200ok的,健康检查是更容易成功。如果他们仍然失败,请回到我身边。


更新:我试图改变网站启用在nginx的配置为“”,但错误依然存在

我解决:

在nginx的/网站启用:

location /elb-health { 
    return 200; 
    access_log off; 
} 

改变了ELB健康检查/ ELB-heatlh和AWS ELB停止从AWS支持返回503

我猜想错误简单地从你的ELB配置,
如果你真的想你的nginx使用443端口你的EC2你需要设置这种类型监听的:

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

HTTPS - 端口443 |实例协议HTTP |实例端口80 |

或者你只需​​配置Nginx只监听80端口,ELB将签名并将443重定向到80,并且所有工作都使用HTTPS。

+0

电子邮件: “话虽这么说,你必须配置你的nginx服务器,以便在没有主机头的情况下它将返回200ok的请求。修改完这个之后,为了验证你是否正确设置了它,从另一个linux运行以下命令实例在同一个VPC中。“ 命令:curl -Iv http://INTERNALIP//index.html 我试图将sites-enabled改为“”,但404错误仍然存​​在于curl – Guilherme