php 由于http/https不一致,Laravel签名验证在EC2上失败

e0bqpujr  于 2023-09-29  发布在  PHP
关注(0)|答案(1)|浏览(89)

我用breeze starter kit安装了一个新的laravel应用程序,带有电子邮件验证功能。在本地,一切工作正常,但我发现http与https时,我在负载均衡器后面的EC2上运行应用程序。我的理解是负载均衡器是一个
具体地,电子邮件验证由于签名验证失败而失败。我的调试已经将问题追溯到以下事实:签名是使用https://url生成的,但当验证url是HTTP时。
我在APP_URL配置值中尝试了http://或https://

  • 记录请求URL并发现它正按预期通过

我如何配置laravel在这种情况下正确工作?

0wi1tuuw

0wi1tuuw1#

当使用负载均衡器时,HTTPS请求在负载均衡器处终止,并通过HTTP转发到将处理它的单个EC2示例。
为了使终端服务器保留关于原始请求的信息,负载均衡器添加具有关于原始请求的信息的报头。添加哪些标头取决于负载均衡器。具体来说,AWS使用(除其他外)X-Forwarded-Proto标头。
Laravel支持阅读这些头文件并适当地设置请求标志。这可以通过设置TrustProxies中间件来完成
以下是一个示例设置(我们在AWS中的应用程序中使用此设置,因此它确实适用于我们):

class TrustProxies extends Middleware {
    protected $proxies;

    protected $headers = Request::HEADER_X_FORWARDED_AWS_ELB;
}

该中间件默认包含在Laravel样板Kernel.php文件中。
需要手动配置的原因是:
1.每个不同的代理可以设置不同的标头
1.代理不会取消与请求一起发送的标头,因此阅读所有这些标头可能会导致用户欺骗某些标头并欺骗您的Web服务器。在响应中使用错误的主机或协议

相关问题