如何配置Symfony在负载均衡器ob娱乐下载或反向代理后工作
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 5.0,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
如何配置Symfony在负载均衡器ob娱乐下载或反向代理后工作
当你部署你的应用程序时,你可能在一个负载均衡器(例如AWS弹性负载平衡)或反向代理(例如Varnish for缓存).
在大多数情况下,这不会给Symfony带来任何问题。ob娱乐下载但是,当请求通过代理时,某些请求信息将使用标准中的一种发送转发
头或X-Forwarded - *
头。例如,不读REMOTE_ADDR
头(现在将是反向代理的IP地址),用户的真实IP将存储在一个标准转发:= "…"
标头或X-Forwarded-For
头。
如果您没有配置Symfony来查找这些头信息,ob娱乐下载那么您将得到关于客户机的IP地址、客户机是否通过HTTPS连接、客户机的端口和请求的主机名的错误信息。
解决方案:setTrustedProxies ()
为了解决这个问题,你需要告诉Symfony哪些反向代理IP地ob娱乐下载址值得信任,以及你的反向代理使用哪些头来发送信息:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/ /公共/ index . php/ /……$请求=请求::createFromGlobals ();//告诉Symfob娱乐下载ony你的反向代理请求::setTrustedProxies (//代理的IP地址(或范围)[“192.0.0.1”,“10.0.0.0/8”),// trust *all* "X-Forwarded-*"报头请求::HEADER_X_FORWARDED_ALL//或者,如果你的代理使用"Forwarded"报头/ /请求::HEADER_FORWARDED//或者,如果您正在使用AWS ELB/ /请求::HEADER_X_FORWARDED_AWS_ELB);
Request对象有几个要求::HEADER_ *
精确控制的常数哪一个来自反向代理的头文件是可信的。参数是一个位字段,所以你也可以传递你自己的值(例如。0 b00110
).
但是如果我的反向代理的IP不断变化怎么办!
一些反向代理(如AWS弹性负载平衡)没有静态IP地址,甚至没有可以使用CIDR标记的目标范围。在这种情况下,您需要—非常仔细地——信任所有代理。
- 将web服务器配置为不响应来自任何负载均衡器以外的客户端。对于AWS,这可以通过安全组.
一旦您保证了流量将只来自您信任的反向代理,将Symfony配置为ob娱乐下载总是信任传入请求:
1 2 3 4 5 6 7 8 9 10 11
/ /公共/ index . php/ /……请求::setTrustedProxies (// trust *all*请求('REMOTE_ADDR'字符串在//运行时间$_SERVER['REMOTE_ADDR'])[“127.0.0.1”,“REMOTE_ADDR”),//如果你使用ELB,否则使用一个常量从上面请求::HEADER_X_FORWARDED_AWS_ELB);
就是这样!防止来自所有不可信来源的流量是至关重要的。如果你允许外部流量,他们可以“欺骗”他们的真实IP地址和其他信息。
提示
在使用ob娱乐下载Symfony Flex您可以设置TRUSTED_PROXIES
env var:
1 2
# .envTRUSTED_PROXIES = 127.0.0.1, REMOTE_ADDR
如果你也在你的负载均衡器上使用反向代理(例如。ob直播appCloudFront),称请求- >服务器- >获取美元(“REMOTE_ADDR”)
这还不够,因为它只信任位于应用程序正上方的节点(在本例中是负载均衡器)。您还需要附加任何其他代理的IP地址或范围(例如。ob直播appCloudFront IP范围)到可信代理数组。
使用反向代理时自定义标头
一些反向代理(比如ob直播appCloudFront与ob直播appCloudFront-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”];/ /……$响应=$内核->处理($请求);