是否可以让AWS ALB通过X-Forwarded-Proto标头?

时间:2017-07-27 17:32:04

标签: amazon-web-services ssl nginx varnish amazon-elb

我正在构建一个具有一些相当神秘的TLS和缓存要求的应用程序,并且我使用的堆栈看起来像:

     HTTPS             HTTP
  Nginx (443)       Varnish (80)
       |                |
  Varnish (80)      Nginx (8080)
       \               /
          AWS ALB (80)
               |
  ECS Pool (Docker) - Apache/80

(我让Nginx在Varnish和ALB之间收听8080,因为Varnish没有像Nginx那样轻松处理多个/更改IP地址的DNS查询。)

问题是HTTPS请求路径:基本上,Nginx设置X-Forwarded-Proto: https,然后我配置了Varnish VCL以安全地将其传递给ALB。但ALB似乎剥离了标头并将其替换为自己的标头(变为X-Forwarded-Proto: http),然后ECS服务器上的后端应用程序看到http并将其所有链接/资源路径写为http,在Safari,Chrome等中导致不安全的混合内容警告

因此,我能够使此设置正常工作的唯一方法是绕过Varnish,在ALB上安装仅后端TLS证书,并设置请求路由,如:

     HTTPS             HTTP
  Nginx (443)       Varnish (80)
       |                |
 AWS ALB (443)      AWS ALB (80)
       \               /
        \             /
  ECS Pool (Docker) - Apache/80

主要没关系......但遗憾的是我无法使用Varnish缓存HTTPS请求的静态资源。我想,解决这个问题的唯一方法就是用Varnish和自定义vmod或其他工具(Lambda等)完全替换ALB,以解释不断变化的ECS Docker容器实例池......

有没有办法命令AWS ALB / ELB通过标头或对标头的任何控制?我无法在文档或控制台中找到任何内容,而其他大多数人似乎都在ALB上终止HTTPS。如果我只有一个证书,或者只有一个,或者可以使用SNI,我肯定会这样做......但我有数百个域名的数百个证书,并且不能:(

0 个答案:

没有答案