我用breeze starter kit安装了一个新的laravel应用程序,带有电子邮件验证功能。在本地,一切工作正常,但我发现http与https时,我在负载均衡器后面的EC2上运行应用程序。我的理解是负载均衡器是一个
具体地,电子邮件验证由于签名验证失败而失败。我的调试已经将问题追溯到以下事实:签名是使用https://url生成的,但当验证url是HTTP时。
我在APP_URL配置值中尝试了http://或https://
- 记录请求URL并发现它正按预期通过
我如何配置laravel在这种情况下正确工作?
1条答案
按热度按时间0wi1tuuw1#
当使用负载均衡器时,HTTPS请求在负载均衡器处终止,并通过HTTP转发到将处理它的单个EC2示例。
为了使终端服务器保留关于原始请求的信息,负载均衡器添加具有关于原始请求的信息的报头。添加哪些标头取决于负载均衡器。具体来说,AWS使用(除其他外)
X-Forwarded-Proto
标头。Laravel支持阅读这些头文件并适当地设置请求标志。这可以通过设置
TrustProxies
中间件来完成以下是一个示例设置(我们在AWS中的应用程序中使用此设置,因此它确实适用于我们):
该中间件默认包含在Laravel样板
Kernel.php
文件中。需要手动配置的原因是:
1.每个不同的代理可以设置不同的标头
1.代理不会取消与请求一起发送的标头,因此阅读所有这些标头可能会导致用户欺骗某些标头并欺骗您的Web服务器。在响应中使用错误的主机或协议