服务器使用 Nginx环境,网站并且嵌套了CDN,难免会遇到一个问题:请求日志中记录的都是 CDN IP,而非实际请求IP 。这样我们就分不清是搜索引擎蜘蛛抓取,还是用户访问的,或者是被采集了。
本篇文章就专门来解决此问题,步骤如下:
只需要在 Nginx 的”Http段“添加如下配置即可,宝塔面板,如下图:
获取CDN真实请求IP设置
代码:
set_real_ip_from 0.0.0.0/0;
real_ip_header X-Forwarded-For;
关于这两段代码释义:
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 可能不存在,需要自行进行安装并开启,才可配置生效,安装此模块的方法本文不进行赘述。