如何配置Symfony在负载均衡器欧宝娱乐app下载地址或反向代理后工作

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 5.2,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

如何配置Symfony在负载均衡器欧宝娱乐app下载地址或反向代理后工作

当你部署你的应用程序时,你可能在一个负载均衡器(例如AWS弹性负载平衡)或反向代理(例如Varnish for缓存).

在大多数情况下,这不会给Symfony带来任何问题。欧宝娱乐app下载地址但是,当请求通过代理时,某些请求信息将使用标准中的一种发送转发头或X-Forwarded - *头。例如,不读REMOTE_ADDR头(现在将是反向代理的IP地址),用户的真实IP将存储在一个标准转发:= "…"标头或X-Forwarded-For头。

如果您没有配置Symfony来查找这些头信息,欧宝娱乐app下载地址那么您将得到关于客户机的IP地址、客户机是否通过HTTPS连接、客户机的端口和请求的主机名的错误信息。

解决方案:setTrustedProxies ()

为了解决这个问题,你需要告诉Symfony哪些反向代理IP地欧宝娱乐app下载地址址值得信任,以及你的反向代理使用哪些头来发送信息:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8 9
#配置/包/ framework.yaml框架:#……#代理的IP地址(或范围)trusted_proxies:“192.0.0.1,10.0.0.0/8”# trust *all*“X-Forwarded-*”头trusted_headers:[' x-forwarded-for ',“x-forwarded-host”“x-forwarded-proto”“x-forwarded-port”#或,如果你的代理使用“Forwarded”头trusted_headers:(“转发”)

5.2

在以前的Symfony版欧宝娱乐app下载地址本中,使用了上面的示例HEADER_X_FORWARDED_ALL信任所有“X-Forwarded-”报头,但自Symfony 5.2以来,这个常量已弃用,取而代之的是个体欧宝娱乐app下载地址HEADER_X_FORWARDED_ *常量。

谨慎

使要求::HEADER_X_FORWARDED_HOST选项将应用程序公开给HTTP主机头攻击.确保代理真正发送x-forwarded-host头。

Request对象有几个要求::HEADER_ *精确控制的常数哪一个来自反向代理的头文件是可信的。参数是一个位字段,所以你也可以传递你自己的值(例如。0 b00110).

5.2

用于配置可信代理和报头的特性trusted_proxies而且trusted_headersoptions是在Symfony 5.2中引入的。欧宝娱乐app下载地址在早期的Symfony欧宝娱乐app下载地址版本中,您需要使用要求::setTrustedProxies ()方法中的公共/ index . php文件。

谨慎

属性时,“受信任代理”特性不能按预期工作Nginx realip模块.在为Symfony应用程序提供服务时禁用该模块。欧宝娱乐app下载地址

但是如果我的反向代理的IP不断变化怎么办!

一些反向代理(如AWS弹性负载平衡)没有静态IP地址,甚至没有可以使用CIDR标记的目标范围。在这种情况下,您需要—非常仔细地——信任所有代理。

  1. 将web服务器配置为响应来自任何负载均衡器以外的客户端。对于AWS,这可以通过安全组
  2. 一旦您保证了流量将只来自您信任的反向代理,将Symfony配置为欧宝娱乐app下载地址总是信任传入请求:

    1 2 3 4 5 6
    #配置/包/ framework.yaml框架:#……# trust *all*请求('REMOTE_ADDR'字符串在#运行时间$_SERVER['REMOTE_ADDR'])trusted_proxies:“127.0.0.1,REMOTE_ADDR”

就是这样!防止来自所有不可信来源的流量是至关重要的。如果你允许外部流量,他们可以“欺骗”他们的真实IP地址和其他信息。

提示

在使用欧宝娱乐app下载地址Symfony Flex您可以设置TRUSTED_PROXIESenv var:

1 2
# .envTRUSTED_PROXIES = 127.0.0.1, REMOTE_ADDR
1 2 3 4
#配置/包/ framework.yaml框架:#……trusted_proxies:' % env (TRUSTED_PROXIES) %

如果你也在你的负载均衡器上使用反向代理(例如。欧宝体育应用最新版app下载CloudFront),称请求- >服务器- >获取美元(“REMOTE_ADDR”)这还不够,因为它只信任位于应用程序正上方的节点(在本例中是负载均衡器)。您还需要附加任何其他代理的IP地址或范围(例如。欧宝体育应用最新版app下载CloudFront IP范围)到可信代理数组。

使用反向代理时自定义标头

一些反向代理(比如欧宝体育应用最新版app下载CloudFront欧宝体育应用最新版app下载CloudFront-Forwarded-Proto)可能会迫使你使用自定义头文件。比如你有Custom-Forwarded-Proto而不是X-Forwarded-Proto

在本例中,需要设置标头X-Forwarded-Proto价值是Custom-Forwarded-Proto在你的申请中足够早,即在处理请求之前:

1 2 3 4 5 6
/ /公共/ index . php/ /……_SERVER“HTTP_X_FORWARDED_PROTO”] =_SERVER“HTTP_CUSTOM_FORWARDED_PROTO”];/ /……响应内核->处理(请求);
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。