如何配置Symfony背后的工作负欧宝娱乐app下载地址载均衡器或反向代理吗
编辑该页面警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 2.7,不再维护。
读这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。
如何配置Symfony背后的工作负欧宝娱乐app下载地址载均衡器或反向代理吗
部署应用程序时,您可能会在负载平衡器(例如一个AWS弹性负载平衡)或反向代理(例如清漆缓存)。
在大多数情况下,这与Symfony不会引起任何问题。欧宝娱乐app下载地址但是,当一个请求通过代理,某些请求信息发送使用标准转发
头或非标准特殊X-Forwarded - *
头。例如,而不是阅读REMOTE_ADDR
头(现在将你的反向代理的IP地址),用户的真实IP将存储在一个标准转发:= "…"
头或非标准X-Forwarded-For
头。
2.7
转发
头支持是在Symfony 2.7中引入的。欧宝娱乐app下载地址
如果你不配置Symfony寻找这些标题,你会得欧宝娱乐app下载地址到不正确的客户机的IP地址的信息,客户端是否通过HTTPS连接,客户的港口和被请求的主机名。
解决方案:trusted_proxies
这是没有问题,但你做需要告诉Symfony正在欧宝娱乐app下载地址发生什么并反向代理IP地址将会做这样的事情:
- YAML
- XML
- PHP
1 2 3 4
# app / config / config.yml#……框架:trusted_proxies:[192.0.0.1,10.0。0< /span>。0< /span>/ 8)
1 2 3 4 5 6 7 8 9 10 11 12 13
< !——app / config / config。xml - - >< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xmlns:框架=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/symfony”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd //www.oldmanjams.com/schema/dic/symfony //www.oldmanjams.com/schema/dic/symfony/symfony-1.0.xsd”><框架:配置trusted-proxies=“192.0.0.1 10.0.0.0/8”>< !——……- - >< /框架:配置>< /容器>
1 2 3 4
/ / app / config / config . php美元容器- >loadFromExtension (“框架”,数组(“trusted_proxies”= >数组(“192.0.0.1”,“10.0.0.0/8”)));
在这个例子中,你说你的反向代理(或代理)的IP地址192.0.0.1
或匹配的IP地址范围使用CIDR标记10.0.0.0/8
。更多细节,请参阅framework.trusted_proxies选择。
你也说你相信代理不发送冲突的标题,例如发送X-Forwarded-For
和转发
在相同的请求。
就是这样!欧宝娱乐app下载地址Symfony将寻找正确的标题信息,如客户机的IP地址,主机、端口以及是否使用HTTPS请求。
但是如果我反向代理的IP不断变化!
一些反向代理(比如AWS弹性负载平衡)没有一个静态IP地址或甚至一个范围,你可以针对CIDR标记。在这种情况下,您将需要非常仔细地——信任所有代理。
- 配置您的web服务器(年代)不应对流量任何客户除了你的负载平衡器。AWS,这个可以用安全组。
一旦你保证交通只会来自你信任的反向代理,配置Symfony欧宝娱乐app下载地址总是信任传入请求。这样做是在前端控制器的:
1 2 3 4 5 6 7
/ /网络/ app.php/ /……美元请求=请求:createFromGlobals ();+请求::setTrustedProxies(阵列(127.0.0.1,请求- >服务器- >获取美元(REMOTE_ADDR)));/ /……
- 在你确保trusted_proxies设置
应用程序/配置/ config.yml
没有设置或它将覆盖setTrustedProxies ()
上面的调用。
就是这样!这是很重要的一个方面,你防止交通所有非可信来源。如果你允许外部交通,他们可以“欺诈”他们的真实IP地址和其他信息。
我的反向代理发送X-Forwarded-For但不转发过滤头
许多流行的代理实现尚不支持转发
头,不默认过滤。理想情况下,你会配置代理。如果这是不可能的,你可以告诉Symfony的不信任欧宝娱乐app下载地址转发
头,同时还能信任你的代理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
)。