在大部分实际业务场景中,网站访问请求并不是简单地从用户(访问者)的浏览器直达网站的源站服务器,中间可能经过所部署的CDN、高防IP、WAF等代理服务器。 # 例如,网站可能采用这样的部署架构:用户 > CDN/高防IP/WAF/游戏盾 > 源站服务器。这种情况下,访问请求在经过多层加速或代理转发后,源站服务器该如何获取发起请求的真实客户端IP? # 问:如何获取访问用户的真实IP呢? # 答:为解决这个问题,可以通过在乌云盾转发的HTTP头信息中增加 X-Forwarded-For 信息,用于记录客户端的真实IP,这时web服务器的日志就可以使用 $http\_x\_forwarded\_for变量记录远程客户端的真实IP。格式如下: * Nginx '$http\_x\_forwarded\_for - $remote\_user \[$time\_local\] "$request" ''$status $body\_bytes\_sent "$http\_referer" ''"$http\_user\_agent" '; * Apache LogFormat "%{X-Forwarded-For}i %l %u %t \\"%r\\" %>s %b \\"%{Referer}i\\" \\"%{User-Agent}i\\"" * ASP Request.ServerVariables("HTTP\_X\_FORWARDED\_FOR") * PHP $\_SERVER\["HTTP\_X\_FORWARDED\_FOR"\] * JSP request.getHeader("HTTP\_X\_FORWARDED\_FOR") 已经接入乌云盾的用户,可以修改配置的方式,从日志中获取用户的真实IP,以便了解用户的访问情况。