基础架构

L1-Nginx(proxy)-->L2-Nginx(proxy)-->Nginx(Web)

Nginx(Web)获取客户端真实IP

  • 安装RealIP模块,在有CDN或多层反向代理的情况下,获取用户真实IP
cd /opt/nginx-1.8.1
./configure --prefix=/app/nginx-1.8.1 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module
make && make install

Server模块中增加

set_real_ip_from  10.0.0.0/24;
set_real_ip_from  192.168.0.0/24;
real_ip_header    X-Forwarded-For;
real_ip_recursive on;
  • set_real_ip_from:告诉nginx,192.168.0.109是我们的反向代服务器不是真实的用户IP
  • real_ip_header:告诉nginx真正的用户IP是存在X-Forwarded-For请求头中
  • 当real_ip_recursive为off时,nginx会把real_ip_header指定的HTTP头中的最后一个IP当成真实IP
  • 当real_ip_recursive为on时,nginx会把real_ip_header指定的HTTP头中的最后一个不是信任服务器的IP当成真实IP

三种在CDN环境下获取用户IP方法总结

  • CDN自定义header头

优点:获取到最真实的用户IP地址,用户绝对不可能伪装IP Ucloud为例https://docs.ucloud.cn/storage_cdn/ucdn/faq.html 缺点:需要CDN厂商提供

  • 程序获取forwarded-for头

优点:可以获取到用户的IP地址 缺点:程序需要改动,以及用户IP有可能是伪装的

  • 使用realip获取

优点:程序不需要改动,直接使用remote_addr即可获取IP地址 缺点:ip地址有可能被伪装,而且需要知道所有CDN节点的ip地址或者ip段

results matching ""

    No results matching ""