当HTTP请求经过七层代理时,其来源IP地址会被修改为代理地址,而非真实客户端的地址。事实上,客户端的IP地址通常被写入HTTP请求头的x-forwarded-for字段中。 阿里云Web应用防火墙的工作原理如下。 假设Web应用防火墙防护的域名为“www.abc.com”。那么,从客户端发出的请求依次经过以下节点:客户端浏览器 > Web应用防火墙 > 源站服务器(pache/Nginx/IIS等)。在此结构下,Web应用防火墙扮演源站和客户端之间的反向代理。 然而,在包含多层代理的网络结构下(例如,除过Web应用防火墙还接入了CDN和DDoS高防IP),所有代理的IP地址都会被添加在x-forwarded-for字段中。这是因为每经过一次转发,代理服务器都会写入代理IP地址。 因此,x-forwarded-for字段可能显示为X-Forwarded-For: 客户端IP, 代理IP1, 代理IP2, 代理IP3, ...。其中,客户端IP仍会占据在第一个位置。 操作流程 参照以下步骤,获取客户端真实IP地址: 请求x-forwarded-for字段内容。 以下为不同语言的示例代码: ASP Request.ServerVariables("HTTP_X_FORWARDED_FOR") ASP.NET(C#) Request.ServerVariables["HTTP_X_FORWARDED_FOR"] PHP $_SERVER["HTTP_X_FORWARDED_FOR"] JSP request.getHeader(“HTTP_X_FORWARDED_FOR”) 以逗号为分隔符分隔获得的x-forwarded-for内容,第一个IP地址就是客户端真实IP。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。