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

编辑该页面

警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 5.0,不再维护。

这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。

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

部署应用程序时,您可能会在负载平衡器(例如一个AWS弹性负载平衡)或反向代理(例如清漆缓存)。

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

如果你不配置Symfony寻找这些标题,你会得欧宝娱乐app下载地址到不正确的客户机的IP地址的信息,客户端是否通过HTTPS连接,客户的港口和被请求的主机名。

解决方案:setTrustedProxies ()

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/ /公共/ index . php/ /……美元请求=请求::createFromGlobals ();/ /告诉Sym欧宝娱乐app下载地址fony反向代理请求::setTrustedProxies (/ /代理的IP地址(或范围)(“192.0.0.1”,“10.0.0.0/8”),/ /信任* *“X-Forwarded - *”标题请求::HEADER_X_FORWARDED_ALL/ /或,如果您的代理,而不是使用“转发”头/ /请求::HEADER_FORWARDED/ /或者,如果您正在使用AWS ELB/ /请求::HEADER_X_FORWARDED_AWS_ELB);

有几个请求对象要求::HEADER_ *常数控制准确哪一个头从反向代理是可信的。参数是一个位域,所以你也可以通过自己的价值(如。0 b00110)。

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

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

  1. 配置您的web服务器(年代)应对流量任何客户除了你的负载平衡器。AWS,这个可以用安全组
  2. 一旦你保证交通只会来自你信任的反向代理,配置Symfony欧宝娱乐app下载地址总是信任传入请求:

    1 2 3 4 5 6 7 8 9 10 11
    / /公共/ index . php/ /……请求::setTrustedProxies (/ /信任* *请求(“REMOTE_ADDR”字符串替换/ /运行时通过$ _SERVER [' REMOTE_ADDR '])(“127.0.0.1”,“REMOTE_ADDR”),/ /如果你使用ELB,否则使用一个常数请求::HEADER_X_FORWARDED_AWS_ELB);

就是这样!这是很重要的一个方面,你防止交通所有非可信来源。如果你允许外部交通,他们可以“欺诈”他们的真实IP地址和其他信息。

提示

在应用程序中使用欧宝娱乐app下载地址Symfony Flex你可以设置TRUSTED_PROXIESenv var:

1 2
# .envTRUSTED_PROXIES = 127.0.0.1, REMOTE_ADDR

如果你还使用反向代理的负载平衡器(例如。欧宝体育应用最新版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”];/ /……美元响应=美元内核- >处理(美元请求);
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。