如何配置Symfony在负载均衡器ob娱乐下载或反向代理后工作

编辑本页

警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 2.8,现已不再维护。

本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。

如何配置Symfony在负载均衡器ob娱乐下载或反向代理后工作

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

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

2.7

转发在Symfony 2.7中引入了头文件支持。ob娱乐下载

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

解决方案:trusted_proxies

这不是问题,但是你需要告诉Symfony发生ob娱乐下载了什么,哪些反向代理IP地址将做这种类型的事情:

  • YAML
  • XML
  • PHP
1 2 3 4
# app / config / config.yml#……框架:trusted_proxies:[192.0.0.1,10.0.0.0/ 8)

在本例中,您说的是反向代理(或多个代理)具有IP地址192.0.0.1或匹配使用CIDR表示法的IP地址范围10.0.0.0/8.有关详细信息,请参见framework.trusted_proxies选择。

您还说您相信代理不会发送冲突的头信息,例如同时发送两个头信息X-Forwarded-For而且转发同样的请求。

就是这样!ob娱乐下载Symfony现在将寻找正确的头信息,以获得诸如客户端的IP地址、主机、端口以及请求是否使用HTTPS等信息。

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

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

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

    1 2 3 4 5 6 7
    // web/app.php //…$request = request::createFromGlobals();+ Request::setTrustedProxies(array('127.0.0.1', $ Request ->server->get('REMOTE_ADDR')));/ /……
  3. 确保在您的应用程序/配置/ config.yml未设置,否则将覆盖setTrustedProxies ()上面的调用。

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

我的反向代理发送x转发,但不过滤转发报头

方法,许多流行的代理实现还不支持转发头,默认情况下不过滤它。理想情况下,您应该在代理中配置此功能。如果这是不可能的,您可以告诉Symfony不信任ob娱乐下载转发头,同时仍然信任您的代理X-Forwarded-For头。

这是在你的前置控制器内部完成的:

1 2 3 4 5 6 7
/ /网络/ app.php/ /……请求::setTrustedHeaderName(请求::HEADER_FORWARDED,);响应内核->处理(请求);/ /……

配置代理服务器信任是非常重要的,因为不这样做将允许恶意用户“欺骗”他们的IP地址。

我的反向代理使用非标准(不是X-Forwarded)报头

虽然RFC 7239最近定义了一个标准转发报头公开所有代理信息,大多数反向代理以非标准方式存储信息X-Forwarded - *头。

但如果反向代理使用其他非标准标头名称,则可以配置这些名称(请参阅“信任代理”)。

这样做的代码将需要生活在你的前端控制器(例如。web / app.php)。

我的反向代理不提供所有标准标头

例如,AWS弹性负载均衡不提供X-Forwarded-Host而且X-ForwardedHTTP头文件,所以你必须在前端控制器中做以下更改:

12 3 4 5 6 7 8 9 10 11 12
// web/app.php //…$request = request::createFromGlobals();//小心下一行;参见“但是如果我的反向代理的IP不断变化怎么办!”+ Request::setTrustedProxies(array('127.0.0.1', $ Request ->server->get('REMOTE_ADDR')));//需要下一行,因为AWS ELB不发送x - forward - host+ Request::setTrustedHeaderName(Request::HEADER_CLIENT_HOST, null);//需要下一行,因为AWS ELB不使用RFC 7239+ Request::setTrustedHeaderName(Request::HEADER_FORWARDED, null);/ /……
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。