一、场景
Nginx配置的域名使用了Cloudflare CDN服务,Nginx日志获取到的客户端IP不是用户的真实IP地址,进而不能对相关接口服务做访问限制。
二、一般情况获取用户真实IP
1 | 在location区段加入以下配置 |
三、获取CDN上用户的真实IP
确认Nginx是否支持
1
2nginx -V
确认有没有 --with-http_realip_module模块,有表示支持,没有可能需要编译
编译
- 进入nginx 源码安装包目录下
- configure 的参数就和原来保持一样,只是增加一个–with-http_realip_module
- 例如:–prefix=/usr/local/nginx –with-http_stub_status_module –with-http_realip_module
- make && make install
- 至于平滑升级,可直接执行 killall -s USR2 nginx
接下来编辑location区段,加入以下信息
1
2
3
4
5
6Cloudflare CDN IP段
set_real_ip_from 131.0.72.0/22;
set_real_ip_from 131.0.72.0/22;
......
real_ip_header X-Forwarded-For;
real_ip_recursive on;注:set_real_ip_from要填写CDN真实的IP或IP段
Cloudflare CDN IP段: https://www.cloudflare.com/ips/
到此配置完成,结合allow/deny规则 即可对客户端IP做访问限制了。
- 本文作者: GaryWu
- 本文链接: https://garywu520.github.io/2019/12/23/Nginx获取CDN上用户的真实IP地址/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!