Symfony2 使用 Amazon 负载均衡器和 SSL : Error on isSecure() Check

标签 symfony ssl

您好,我遇到了一个问题,Symfony2 无法识别来自 Amazon AWS 的负载均衡器 header ,需要使用 requires_channel: https 安全性来确定请求是否为 SSL配置。

默认情况下,Symfony2 $request->isSecure() 会查找“X_FORWARDED_PROTO”,但显然没有标准,并且 Amazon AWS 负载均衡器使用“HTTP_X_FORWARDED_PROTO”。

我看到了有关在配置中设置可信代理的食谱文章,但该文章主要针对将特定 IP 地址列入白名单,并且不适用于生成动态 IP 的 AWS。另一个功能,即设置框架配置以包含 trust_proxy_headers: true 已被弃用。这会在仅需要 SSL 的页面上强制进行无休止的重定向,从而破坏了我的应用程序。

最佳答案

您现在可以使用 setTrustedHeaderName() 更改 header 。此方法允许您更改整个文件中使用的四个 header 。

const HEADER_CLIENT_IP    = 'client_ip'; // defaults 'X_FORWARDED_FOR'
const HEADER_CLIENT_HOST  = 'client_host'; // defaults 'X_FORWARDED_HOST'
const HEADER_CLIENT_PROTO = 'client_proto'; // defaults 'X_FORWARDED_PROTO'
const HEADER_CLIENT_PORT  = 'client_port'; // defaults 'X_FORWARDED_PORT'

上面的内容取自 Request 类,指示可用于上述方法的键。

// $request is instance of HttpFoundation\Request;

$request->setTrustedHeaderName('client_proto', 'HTTP_X_FORWARDED_PROTO');

也就是说,在撰写本文时,使用 "symfony/http-foundation": "2.5.*" 下面的代码可以正确确定请求在 AWS 负载后面是否安全平衡器。

// All IPs (*)
// $proxies = [$request->getClientIp()];

// Array of CIDR pools from load balancer
// EC2 -> Network & Security -> Load Balancers
//  -> X -> Instances (tab) -> Availability Zones
//  -> Subnet (column)

$proxies = ['172.x.x.0/20'];

$request->setTrustedProxies($proxies);

var_dump($request->isSecure()); // bool(true)

关于Symfony2 使用 Amazon 负载均衡器和 SSL : Error on isSecure() Check,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18596029/

相关文章:

java - HttpClient 同时设置 SSLHostnameVerifier 和 ConnectionManager

mysql - Symfony 2 - Doctrine ORM 更新查询不起作用

symfony - Gedmo Timestampable 和 Blameable 在合并实体后不起作用

php - Drupal 8 - 以编程方式禁用或启用主导航上的链接

java - Spring Boot 是否支持服务器名称指示(SNI)?

c# - .Net Core 和 Microsoft.Web.Administration

php - 有教义的解释

php - 覆盖 Doctrine 2.6 中特征属性的关联映射

django - 如何在Django中实现Https(SSL中间件)

ssl - 无法与 rabbitmq 建立 ssl 连接