网站接入Web应用防火墙WAF(Web Application Firewall)后,访问请求在到达源站服务器之前,需要经过WAF的代理转发。这种情况下,源站服务器可以通过解析回源请求中的X-Forwarded-For记录,获取客户端的真实IP。
WAF在将客户端的访问请求转发到下一环节的服务器时,会在HTTP的请求头中添加一条X-Forwarded-For记录,用于记录客户端的IP,格式为X-Forwarded-For:客户端IP。如果客户端和源站服务器之间有多个代理服务器(例如WAF、DDoS高防、CDN等),则X-Forwarded-For记录使用以下格式记录客户端IP和依次经过的代理服务器IP:X-Forwarded-For:客户端IP
, 代理服务器1的IP, 代理服务器2的IP, 代理服务器3的IP, ……。
因此,常见的Web应用服务器(包括Nginx、IIS 6、IIS 7、Apache、Tomcat)以及容器K8s可以通过解析X-Forwarded-For记录获取客户端真实IP。
Nginx服务器使用http_realip_module
模块解析X-Forwarded-For
记录。安装http_realip_module
模块,修改Nginx配置。
在Nginx服务器上执行# nginx -V | grep http_realip_module
命令,查看是否已安装http_realip_module
模块。