我正在利用 AWS ALB,我的设置如下:
ALB]-HTTPS-[NGINX]-HTTP-[ALB]-HTTP-[APP/NGINX]
问题是我正在使用 NGINX 通过 ALB 将 X-Forwarded-Proto=https 转发到应用程序,但 ALB 正在将其剥离,应用程序需要 X-Forwarded-Proto=https 才能发出安全 cookie 并设置 STS 标头。我们已尝试在 NGINX 中设置此标头,但看起来 APP ALB 将其剥离了。根据 AWS 支持,这是设计使然。
有一种解决方法是使用自定义标头来保存第一个 ALB 中的 X-Forwarded-Proto 值,并将其发送到第二个 ALB,这样当它到达 APP 时就不会被剥离,有人能建议如何在 NGINX 上实现这一点吗,或者建议针对此问题的其他解决方法
答案1
从这个论坛链接,他们说应用程序负载均衡器将传递X-Forwarded-For / Proto / Porthttps://forums.aws.amazon.com/thread.jspa?messageID=738145。
如果在您的案例中 X-Forwarded-Proto 标头始终获得值 HTTP。那么,这意味着 AWS ALB 不会剥离 X-Forwarded-Proto 标头,而是会替换它。如果 AWS ALB 确实替换了 X-Forwarded-Proto,您可以在第一个 nginx 实例中使用自定义 HTTP 标头传递标头。就像这个
Location /{
proxy_pass http://upstream;
proxy_set_header X-Custom-Forwarded-Proto $http_x_forwarded_proto;
}
希望这会有所帮助。谢谢