2016-08-07 123 views
0

我正在尝试找出管理EB Docker应用程序的HTTPS的最佳方法。AWS Elastic Beanstalk VPC - 从ELB到HTTPS实例

此刻我正在使用以下方法。

  1. ELB接受443上的HTTPS连接,并转发到实例上的HTTP端口80。
  2. ELB接受80上的HTTP连接,并转发到实例上的HTTP端口8080。
  3. 实例接受端口80上的HTTP连接并转发到docker应用程序。
  4. 实例接受端口8080上的HTTP连接并将它们重定向到HTTPS。

这一切都工作得很好。这意味着码头应用程序根本不必担心重定向。它只是监听端口80,并且它是事情。剩下的就是ELB和码头主持人。

我只关心这个设置,是码头应用程序不知道它运行的安全。如果在我的应用程序中检查这个,它会失败。

我想完全将我的docker应用程序与域名以及可能更改的SSL证书分开,因此我宁愿继续终止ELB上的原始HTTPS连接。我想知道是否有某种方法可以让Docker主机(或ELB)在HTTPS协议中转发(重新加密)请求,但是使用自签名证书,因此我可以保留它的完全通用性。

要清楚的是,这只会在ELB和/或码头主机,我的码头应用程序之间,而不是浏览器。

如果我创建了一个不过期的自签名证书,然后在Docker应用程序(当前使用Apache2,但可能使用nginx)中将其注册到Web服务器,然后简单地告诉ELB或docker主持人转发请求作为HTTPS,这将工作?还是会因为证书不可信而在某个时刻崩溃?

或者是否有某种方法可以在docker应用程序的web-server上终止HTTPS连接,而不需要预先生成证书(我猜这不是,因为它可能需要生成即时证书等)。

是否有推荐的最佳实践方式来做这种事情?

回答

0

当负载平衡器终止客户端连接并转发到后端时,常见解决方案是负载平衡器将头添加到后端请求上,以填充通过使负载平衡器在那里被剥离的任何信息。

ELB has a page on this并使用以下标头:

  • X-Forwarded-For - 客户端IP
  • X-Forwarded-Proto - 该方案/协议
  • X-Forwarded-Port - 的输入端口。

您通常不会直接从客户端获得这些标头,除非它们是可信的客户端。我认为ELB为你照顾。