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

gee*_*guy 5 ssl nginx varnish amazon-web-services amazon-elb

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

     HTTPS             HTTP
  Nginx (443)       Varnish (80)
       |                |
  Varnish (80)      Nginx (8080)
       \               /
          AWS ALB (80)
               |
  ECS Pool (Docker) - Apache/80
Run Code Online (Sandbox Code Playgroud)

(我让Nginx在Varnish和ALB之间监听8080,因为Varnish不像Nginx那样轻松处理多个/更改IP地址的DNS查找).

问题是HTTPS请求路径:基本上,Nginx的设置X-Forwarded-Proto: https,然后我有我的光油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
Run Code Online (Sandbox Code Playgroud)

主要是用这个好了... ...但它是一个耻辱,我不能用光油缓存的静态资源HTTPS请求.我想,解决这个问题的唯一方法就是用Varnish和自定义vmod或其他工具(Lambda等)完全替换ALB,以解释不断变化的ECS Docker容器实例池......

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