nginx取 $remote_addr 当做真实ip,而事实上,$http_X_Forwarded_For 才是用户真实ip,$remote_addr只是代理上一层的地址

解决方案:

在 http 模块 加

set_real_ip_from 172.17.10.125;   #上一层代理IP地址

real_ip_header X-Forwarded-For;
    real_ip_recursive on;

添加之后启动nginx报错:

nginx: [emerg] unknown directive "set_real_ip_from" in /home/lnidmp/nginx/conf/nginx.conf:26

需要添加realip模块,重新编译nginx

1、cd /usr/local/nginx-1.15.12
2、./configure --prefix=/usr/cmcc/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module
3、make && make install

温馨提示:
1、set_real_ip_from 是指接受从哪个信任前代理处获得真实用户ip

2、real_ip_header 是指从接收到报文的哪个http首部去获取前代理传送的用户ip

3、real_ip_recursive 是否递归地排除直至得到用户ip(默认为off)

首先,real_ip_header 指定一个http首部名称,默认是X-Real-Ip,假设用默认值的话,nginx在接收到报文后,会查看http首部X-Real-Ip。

(1)如果有1个IP,它会去核对,发送方的ip是否在set_real_ip_from指定的信任ip列表中。如果是被信任的,它会去认为这个X-Real-Ip中的IP值是前代理告诉自己的,用户的真实IP值,于是,它会将该值赋值给自身的$remote_addr变量;如果不被信任,那么将不作处理,那么$remote_addr还是发送方的ip地址。

(2)如果X-Real-Ip有多个IP值,比如前一方代理是这么设置的:proxy_set_header X-Real-Ip $proxy_add_x_forwarded_for;

得到的是一串IP,那么此时real_ip_recursive 的值就至关重要了。nginx将会从ip列表的右到左,去比较set_real_ip_from 的信任列表中的ip。如果real_ip_recursive为off,那么,当最右边一个IP,发现是信任IP,即认为下一个IP(右边第二个)就是用户的真正IP;如果real_ip_recursive为on,那么将从右到左依次比较,知道找到一个不是信任IP为止。然后同样把IP值复制给$remote_addr。

生产nginx配置文件如下:

user  www;
worker_processes  10;
worker_rlimit_nofile 51200;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
error_log   /data/logs/nginx_error.log  crit;#pid        logs/nginx.pid;events {use epoll;worker_connections  51200;
}http {include       mime.types;default_type  application/octet-stream;#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';#access_log  logs/access.log  main;server_names_hash_bucket_size 128;server_tokens off;expires       1h;sendfile       off; tcp_nopush     on;fastcgi_connect_timeout 1200s;fastcgi_send_timeout 1200s;fastcgi_read_timeout 1200s;fastcgi_buffer_size 128k;fastcgi_buffers 8 128k;#8 128fastcgi_busy_buffers_size 256k;fastcgi_temp_file_write_size 256k;keepalive_timeout  65;tcp_nodelay on;error_page   404  /;    gzip on;gzip_min_length  2048;gzip_buffers     4 16k;gzip_http_version 1.1;gzip_types  text/plain  css  html  application/xml application/x-javascript ;set_real_ip_from 上一层代理IP地址;real_ip_recursive on;real_ip_header X-Forwarded-For;log_format  access  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" $http_x_forwarded_for';
#################### include    ################################################include conf.d/*.conf;
}

转载于:https://www.cnblogs.com/chenjw-note/p/10785181.html

nginx经过多层代理后获取真实来源ip相关推荐

  1. Nginx在多层代理下获取真实客户端IP地址

    最近在研究nginx中如何获取真实客户端IP的方法.众所周知,在编译Nginx时,可通过添加http_realip_module模块来获取真实客户端IP地址.何为真实IP地址呢?请看下图,既获取到的真 ...

  2. 学习笔记 - Nginx在多层代理下获取真实客户端IP地址

    最近在研究nginx中如何获取真实客户端IP的方法.众所周知,在编译Nginx时,可通过添加http_realip_module模块来获取真实客户端IP地址.何为真实IP地址呢?请看下图,既获取到的真 ...

  3. nginx利用反向代理实现获取用户真实ip

    我们访问互联网上的服务时,大多数时,客户端并不是直接访问到服务端的,而是客户端首先请求到反向代理,反向代理再转发到服务端实现服务访问,通过反向代理实现路由/负载均衡等策略.这样在服务端拿到的客户端IP ...

  4. NGINX前端代理TOMCAT取真实客户端IP

    nginx前端代理tomcat取真实客户端IP 使用Nginx作为反向代理时,Tomcat的日志记录的客户端IP就不在是真实的客户端IP,而是Nginx代理的IP.要解决这个问题可以在Nginx配置一 ...

  5. Nginx获取真实用户IP

    多级代理下Nginx获取真实用户IP地址的总结 声明:本文参考http://www.ttlsa.com/nginx/nginx-get-user-real-ip/并做了一些补充讲解,希望会更加清晰明了 ...

  6. nginx curl命令有效 curl_setopt无效_日志分析系列(外传一):Nginx透过代理获取真实客户端IP...

    本系列中的故事纯属虚构,如有雷同实属巧合 小B是Q公司的安全攻城狮,为了完成任务小B开始做起了调研(欲知背景如何,且听下回分说). 首先小B弄明白了Q公司的应用系统架构是:Client --> ...

  7. Nginx透过代理获取真实客户端IP

    本系列中的故事纯属虚构,如有雷同实属巧合 小B是'柒'公司的安全攻城狮,为了完成任务小B开始做起了调研(欲知背景如何,且听下回分说). 首先小B弄明白了'柒'公司的应用系统架构是:Client --& ...

  8. 使用nginx代理,怎么获取真实的IP

    1.在nginx.conf配置中加入配置信息 proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; pr ...

  9. go 通过nginx代理后获取用户ip

    go 如果使用自己的服务器,可以直接使用 net/http 来获取 func ip(w http.ResponseWriter, r *http.Request) {fmt.Println(r.Rem ...

最新文章

  1. Linux基础命令---zip
  2. buu [GKCTF2020]汉字的秘密
  3. FTP服务器之pure-ftpd常见问题及解决方法
  4. 前端每日实战:114# 视频演示如何用纯 CSS 和混色模式创作一个 loader 动画
  5. THOR:MindSpore 自研高阶优化器源码分析和实践应用
  6. sharepoint2013用场管理员进行文档库的爬网提示没有权限,拒绝的解决方法
  7. python3 collections模块_python的Collections 模块
  8. vector的初始化
  9. 使用spoon对java代码进行转换
  10. 漫谈程序员(八)阿里巴巴集团合伙人花名单
  11. IPSec IKEV2
  12. 2.4父子进程虚拟地址空间情况
  13. 微信游戏奇迹暖暖选取服务器失败,奇迹暖暖微信区为什么登不上_奇迹暖暖微信区登不上解决办法-66街机网...
  14. python selenium 火狐下载文件
  15. 搬运收藏-Android各种库
  16. 大数据精准营销应用(三)
  17. HTML——阿里百秀案例
  18. xcode ios查看视频是否为hdr
  19. 无法安装某些更新 Windows XP 安全更新程序 (KB2686509)
  20. 蔚来股权曝光:腾讯持股9.8% 有5.6%的投票权

热门文章

  1. 简单的php文件_简单的php文件上传(实例)
  2. 错误: 代理抛出异常错误: java.rmi.server.ExportException: Port already in use: 1099; nested exception is
  3. CocosCreator发布web-desktop获取本地资源
  4. 【PTA】浙大版《C语言程序设计(第3版)》题目集
  5. 如何创建一个Mybatis程序,实现对数据库的简单查询?
  6. python集合中的元素是否可以重复_python列表--查找集合中重复元素的个数
  7. 2021年计算机二级考试广东卷英语,2021年广东计算机等级考试考试模拟练习卷.doc...
  8. 安卓ondraw刷新视图_android播放动画时是否会调用被操作的视图的onDraw方法?
  9. Linux中用户与组群管理
  10. HDU-2602-Bone Collector(dp)