Bil*_*mus 17 locale load-balancing amazon-web-services
我们在ELB后面的EC2上有一些PHP服务器.我们希望通过连接到我们服务器的客户端的IP地址来确定区域设置/区域.问题是PHP服务器只能看到ELB的IP地址.我们希望看到通过ELB传递的客户端的IP地址.
Rya*_*eir 22
根据AWS文档,ELB应该设置'X-Forwarded-For'HTTP头,它保留原始客户端IP地址:
X-Forwarded-For请求标头可帮助您识别客户端的IP地址.由于负载均衡器拦截客户端和服务器之间的流量,因此服务器访问日志仅包含负载均衡器的IP地址.要查看客户端的IP地址,请使用X-Forwarded-For请求标头.
您可以使用以下PHP代码访问它(假设apache):
$http_headers = apache_request_headers();
$original_ip = $http_headers["X-Forwarded-For"];
Run Code Online (Sandbox Code Playgroud)
如果您使用Apache,请查看mod_remoteip模块.它包含在Apache 2.4及更新版本中,但也可以找到2.2的后端端口.
该模块将使用RemoteIPHeader指令配置的请求标头中报告的用户IP地址覆盖连接的客户端IP地址.
按照指示更换后,这个被覆盖的useragent IP地址随后用于mod_authz_host Require ip功能,由mod_status报告,并由mod_log_config%a和core%a格式字符串记录.连接的基础客户端IP以%{c} a格式字符串形式提供.
换句话说,您可以设置要使用的标头(例如X-Forwarded-For)以及哪些IP是可信的(例如您的负载均衡器).从标头中删除可信IP,并将第一个不受信任的IP用作始发客户端.然后,Apache在其他模块中内部使用此IP,例如用于日志记录,主机身份验证等.
这使它比仅处理PHP中的XFF头更有用,因为mod_remoteip负责整个堆栈,确保访问日志正确等等.
注意:还有一个mod_rpaf模块,它是这个模块的前身.它更有限.例如,它无法处理可信的ip范围.你需要这个,因为你事先不知道ELB的IP.它也无法在Apache之前处理多个跃点,例如Varnish之前的ELB.我建议跳过rpaf模块并改用remoteip.
| 归档时间: |
|
| 查看次数: |
14477 次 |
| 最近记录: |