nginx经过多层代理后获取真实来源ip
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相关推荐
- Nginx在多层代理下获取真实客户端IP地址
最近在研究nginx中如何获取真实客户端IP的方法.众所周知,在编译Nginx时,可通过添加http_realip_module模块来获取真实客户端IP地址.何为真实IP地址呢?请看下图,既获取到的真 ...
- 学习笔记 - Nginx在多层代理下获取真实客户端IP地址
最近在研究nginx中如何获取真实客户端IP的方法.众所周知,在编译Nginx时,可通过添加http_realip_module模块来获取真实客户端IP地址.何为真实IP地址呢?请看下图,既获取到的真 ...
- nginx利用反向代理实现获取用户真实ip
我们访问互联网上的服务时,大多数时,客户端并不是直接访问到服务端的,而是客户端首先请求到反向代理,反向代理再转发到服务端实现服务访问,通过反向代理实现路由/负载均衡等策略.这样在服务端拿到的客户端IP ...
- NGINX前端代理TOMCAT取真实客户端IP
nginx前端代理tomcat取真实客户端IP 使用Nginx作为反向代理时,Tomcat的日志记录的客户端IP就不在是真实的客户端IP,而是Nginx代理的IP.要解决这个问题可以在Nginx配置一 ...
- Nginx获取真实用户IP
多级代理下Nginx获取真实用户IP地址的总结 声明:本文参考http://www.ttlsa.com/nginx/nginx-get-user-real-ip/并做了一些补充讲解,希望会更加清晰明了 ...
- nginx curl命令有效 curl_setopt无效_日志分析系列(外传一):Nginx透过代理获取真实客户端IP...
本系列中的故事纯属虚构,如有雷同实属巧合 小B是Q公司的安全攻城狮,为了完成任务小B开始做起了调研(欲知背景如何,且听下回分说). 首先小B弄明白了Q公司的应用系统架构是:Client --> ...
- Nginx透过代理获取真实客户端IP
本系列中的故事纯属虚构,如有雷同实属巧合 小B是'柒'公司的安全攻城狮,为了完成任务小B开始做起了调研(欲知背景如何,且听下回分说). 首先小B弄明白了'柒'公司的应用系统架构是:Client --& ...
- 使用nginx代理,怎么获取真实的IP
1.在nginx.conf配置中加入配置信息 proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; pr ...
- go 通过nginx代理后获取用户ip
go 如果使用自己的服务器,可以直接使用 net/http 来获取 func ip(w http.ResponseWriter, r *http.Request) {fmt.Println(r.Rem ...
最新文章
- Linux基础命令---zip
- buu [GKCTF2020]汉字的秘密
- FTP服务器之pure-ftpd常见问题及解决方法
- 前端每日实战:114# 视频演示如何用纯 CSS 和混色模式创作一个 loader 动画
- THOR:MindSpore 自研高阶优化器源码分析和实践应用
- sharepoint2013用场管理员进行文档库的爬网提示没有权限,拒绝的解决方法
- python3 collections模块_python的Collections 模块
- vector的初始化
- 使用spoon对java代码进行转换
- 漫谈程序员(八)阿里巴巴集团合伙人花名单
- IPSec IKEV2
- 2.4父子进程虚拟地址空间情况
- 微信游戏奇迹暖暖选取服务器失败,奇迹暖暖微信区为什么登不上_奇迹暖暖微信区登不上解决办法-66街机网...
- python selenium 火狐下载文件
- 搬运收藏-Android各种库
- 大数据精准营销应用(三)
- HTML——阿里百秀案例
- xcode ios查看视频是否为hdr
- 无法安装某些更新 Windows XP 安全更新程序 (KB2686509)
- 蔚来股权曝光:腾讯持股9.8% 有5.6%的投票权
热门文章
- 简单的php文件_简单的php文件上传(实例)
- 错误: 代理抛出异常错误: java.rmi.server.ExportException: Port already in use: 1099; nested exception is
- CocosCreator发布web-desktop获取本地资源
- 【PTA】浙大版《C语言程序设计(第3版)》题目集
- 如何创建一个Mybatis程序,实现对数据库的简单查询?
- python集合中的元素是否可以重复_python列表--查找集合中重复元素的个数
- 2021年计算机二级考试广东卷英语,2021年广东计算机等级考试考试模拟练习卷.doc...
- 安卓ondraw刷新视图_android播放动画时是否会调用被操作的视图的onDraw方法?
- Linux中用户与组群管理
- HDU-2602-Bone Collector(dp)