首页 > 解决方案 > 在 Symfony PHP 中强制使用 HTTPS 会导致 AWS 负载均衡器后面的重定向循环

问题描述

我试图在我的 Symfony PHP 应用程序中强制使用 HTTPS。关于这个主题的文档看起来很简单:

# config/routes.yaml
secure:
    path:       /secure
    controller: App\Controller\MainController::secure
    schemes:    [https]

基本上只是添加schemes: [https]到路线中。

但是当我在我的应用程序中执行此操作并部署(使用负载均衡器到 AWS EC2 实例)时,它似乎创建了一个重定向循环。

在此处输入图像描述

这里可能是什么问题?

标签: phpsymfonyamazon-ec2httpssymfony-4.2

解决方案


文档说:

在使用反向代理或负载均衡器时强制使用 HTTPS 需要正确配置以避免无限重定向循环

这反过来又把你带到这里。由于您不知道负载均衡器的 IP 地址(因为 AWS),文档说:

一些反向代理(如 AWS Elastic Load Balancing)没有静态 IP 地址,甚至没有您可以使用 CIDR 表示法定位的范围。在这种情况下,您需要非常小心地信任所有代理。

  1. 将您的 Web 服务器配置为不响应来自负载平衡器以外的任何客户端的流量。对于 AWS,这可以通过安全组来完成。

  2. 一旦你保证流量只会来自你信任的反向代理,配置 Symfony 总是信任传入的请求:

// public/index.php

// ...
Request::setTrustedProxies(
   // trust *all* requests
   ['127.0.0.1', $request->server->get('REMOTE_ADDR')],>

   // if you're using ELB, otherwise use a constant from above
   Request::HEADER_X_FORWARDED_AWS_ELB
);

如果您按照这些步骤操作,并且其他所有内容都配置正确,那么您应该一切顺利。


推荐阅读