AWS ELB不断在redirect的位置标题中显示私有IP

我们使用config.force_ssl = true运行一个简单的Rails 4.0应用程序(在Ubuntu 14.04上)。 SSL被上传到我们的ELB,并且ELB上的443和80端口转发到服务器上的80端口。

由于使用HTTP / 1.0,ELB的私有IP在位置标题中显示,所以我们保持PCI扫描失败。 任何ide如何解决这个问题? 我已经研究了这个广泛的日子,现在真的卡住了。

$ telnet app.ourwebsite.com 80 GET / HTTP/1.0 HTTP/1.1 301 Moved Permanently ... *Location: https://172.31.26.236/* Server: nginx/1.6.2 + Phusion Passenger 4.0.57 Set-Cookie: AWSELB=... 

PCI符合性不合格的原因是因为使用的测试nessus插件10759使用HTTP 1.0,并且不会发送主机标头,并且AWS ELB在连接到您的实例时出于自身的主机头,因为任何原因它到负载均衡器的内部IP。

下面是使用Apache的mod_forensics获取这样一个请求。 请注意,主机头设置为负载平衡器的内部IP:

+11143:551306af:1 | GET / HTTP / 1.1 | host:10.3.2.57 | X-Forwarded-For: 删除 | X-Forwarded-Port:443 | X-Forwarded-Proto:https |连接:keep-alive

这是如何请求(在* nix使用bash):

 (echo -ne "GET / HTTP/1.0\r\n\r\n"; sleep 2) | openssl s_client -connect 1.2.3.4:443 

其中1.2.3.4是ELB的IP地址。 您必须像这样制作请求,因为ELB不会接受\ n \ n直接键入openssl。

请注意,这里发送的唯一头是GET

我的网站没有PCI扫描,这导致我在这里,所以我觉得这需要进一步的解释。

这听起来像你的ELB接收https,然后在http上转发。 所以你的Rails服务器不需要担心SSL,因为它唯一与ELB通信的是。

(这也是我们建立的方式。)

所以你可以从你的Rails服务器中删除config.force_ssl = true ,并让你的ELB需要SSL。