CDN 情况下如何获取真实请求 IP
温馨提示:这篇文章已超过175天没有更新,请注意相关的内容是否还可用!
在使用CDN加速后,获取真实IP地址需要使用一些特殊的方法,因为CDN节点会将用户的请求转发到原始服务器,并在转发过程中修改请求头,以便原始服务器能够正确地处理请求。
服务器使用 Nginx 并且上游嵌套了 CDN,难免会遇到一个问题:“请求日志中记录的都是 CDN IP 而非实际请求 IP” 。众所周知,这样不利于网站管理,或者说难以规避一些恶意的风险。
解决这个问题不复杂,只需要在 Nginx 的 Http 段添加如下配置即可:
set_real_IP_from 0.0.0.0/0; real_IP_header X-Forwarded-For;
以宝塔面板为例,在 “软件商店 > 已安装 > Nginx > 右侧设置 > 配置修改 ” 找到如下位置加入配置:
其他备注信息(不会技术的朋友可以忽略):
1、set_real_IP_from 是指上游代理转发服务器的 IP 地址或者说 IP 段。可以理解为,这些 IP 过来的请求全部做真实 IP 获取处理,类似一个白名单,此教程中设置的 0.0.0.0/0 是指全部请求 IP。
2、real_ip_header 这个不难理解,就是说从那个请求头里面获取真实的 IP,大多数情况下上游 CDN 都会发送 HTTP_X_FORWARDED_FOR 请求头,这个头里面包含的是来路的 IP 串,如 “127.0.0.1,127.0.0.2,127.0.0.3” 一般来说获取第一个不为空的 IP 就是真实的。
3、此教程是以宝塔为例,宝塔环境下安装的 Nginx 自带了 ngx_http_realip_module 这个支持获取真实 IP 的模块,如果是默认编译安装的 Nginx 可能不存在,需要自行进行安装并开启,才可配置生效,安装此模块的方法本文不进行赘述。
还没有评论,来说两句吧...