php - 在 Symfony PHP 中强制使用 HTTPS 会导致 AWS 负载均衡器后面的重定向循环
问题描述
我试图在我的 Symfony PHP 应用程序中强制使用 HTTPS。关于这个主题的文档看起来很简单:
# config/routes.yaml
secure:
path: /secure
controller: App\Controller\MainController::secure
schemes: [https]
基本上只是添加schemes: [https]
到路线中。
但是当我在我的应用程序中执行此操作并部署(使用负载均衡器到 AWS EC2 实例)时,它似乎创建了一个重定向循环。
这里可能是什么问题?
解决方案
文档说:
在使用反向代理或负载均衡器时强制使用 HTTPS 需要正确配置以避免无限重定向循环
这反过来又把你带到这里。由于您不知道负载均衡器的 IP 地址(因为 AWS),文档说:
一些反向代理(如 AWS Elastic Load Balancing)没有静态 IP 地址,甚至没有您可以使用 CIDR 表示法定位的范围。在这种情况下,您需要非常小心地信任所有代理。
将您的 Web 服务器配置为不响应来自负载平衡器以外的任何客户端的流量。对于 AWS,这可以通过安全组来完成。
一旦你保证流量只会来自你信任的反向代理,配置 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 );
如果您按照这些步骤操作,并且其他所有内容都配置正确,那么您应该一切顺利。
推荐阅读
- terraform - 将 terraform 输出分配给环境变量
- python - Python Selenium 等待用户交互继续
- python - 我有一个包含布尔值的列表列表。如何输入布尔函数并在列表的每个子列表中检查它?
- javascript - 在 webhook 嵌入中使用 base64 图像的 discordjs
- javascript - 如何将计时器存储在本地存储中并在页面重新加载时恢复
- python - 在 Django 中使用原始 SQL 打开事务是安全的
- python - Python - 从其他模块中的函数重新分配全局变量的最佳方法
- javascript - 如何在 PHP 中翻转字节数组
- django - NGINX docker-compose - 在上游 nuxt:3000 中找不到主机
- android - Android Studio 上未将手机检测为 Android 设备