Nginx 在有 CDN 情况下获取真实请求 IP
服务器使用 Nginx 并且上游嵌套了 CDN,难免会遇到一个问题:“请求日志中记录的都是 CDN IP 而非实际请求 IP” 。
众所周知,这样不利于网站管理,或者说难以规避一些恶意的风险。
解决这个问题不复杂,只需要在 Nginx 的 Http 段添加如下配置即可:
vi nginx.conf set_real_ip_from 0.0.0.0/0; real_ip_header X-Forwarded-For; real_ip_recursive on;
说明:
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、real_ip_recursive 开启递归查找,确保获取到所有经过CDN的IP地址
4、Nginx 自带了 ngx_http_realip_module 这个支持获取真实 IP 的模块,如果是默认编译安装的 Nginx 可能不存在,需要自行进行安装并开启,才可配置生效,安装此模块的方法如下。
Nginx对进程的控制能力非常强大,可以通过信号指令控制进程。常用的信号有: -QUIT,表处理完当前请求后,关闭进程。 -HUP,表示重新加载配置,也就是关闭原有的进程,并开启新的工作进程。此操作不会中断用户的访问请求,因此可以通过此信号平滑的重启Nginx。 -USR2,用于平滑升级可执行程序。 -WINCH,从容关闭工作进程。 wget http://nginx.org/download/nginx-1.24.0.tar.gz tar xf nginx-1.24.0.tar.gz && cd nginx-1.24.0 ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --with-stream --with-http_realip_module make #千万不要 make install mv /usr/local/nginx/sbin/nginx{,.ori} cp objs/nginx /usr/local/nginx/sbin/ /usr/local/nginx/sbin/nginx -t 建议直接重启 systemctl restart nginxd 平滑迁移 kill -USR2 `cat /usr/local/nginx/logs/nginx.pid` ll /usr/local/nginx/logs/ 查看nginx pid,会出现一个nginx.pid.oldbin 从容关闭旧的Nginx进程 kill -WINCH `cat /usr/local/nginx/logs/nginx.pid.oldbin` 关闭旧的主进程 kill -QUIT `cat /opt/nginx/logs/nginx.pid.oldbin` 检查 /usr/local/nginx/sbin/nginx -V
<< 上一篇
下一篇 >>
网友留言(0 条)