作者:路见不平出手打_418 | 来源:互联网 | 2023-01-27 21:28
我正在构建一个具有一些相当神秘的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
,然后我有我的光油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
我主要是用这个好了... ...但它是一个耻辱,我不能用光油缓存的静态资源HTTPS请求.我想,解决这个问题的唯一方法就是用Varnish和自定义vmod或其他工具(Lambda等)完全替换ALB,以解释不断变化的ECS Docker容器实例池......
有没有办法命令AWS ALB/ELB通过标头或对标头的任何控制?我在文档或控制台中找不到任何内容,而其他大多数人似乎都在ALB上终止HTTPS.如果我刚一个证书,或几个,或者可以使用SNI,我肯定会做到这一点......但我有几百个证书为数百个域,而不能:(