公司有一个应用,后端web用的是nginx,nginx 的所有请求都是通过前端的代理转发过来的,所有在日志格式里面 获取远程ip的变量用的是
$http_x_forwarded_for ,本来用的好好的,但是有一天日志分析脚本里面出现很多请求的 ip地址是空的,大概格式如下
- - - [20/May/2011:02:23:44 -0700] "GET /favi.ico HTTP/1.1" 404 56 "-" "Mozilla/5.0 (Windows NT 6.1; rv:2.0) Geo/20100101 Firefox/4.0" - __cust=000000004A5BB94DD441F61302282103 - - 0.002
- - - [20/May/2011:02:23:45 -0700] "GET /favi.ico HTTP/1.1" 404 56 "-" "Mozilla/5.0 (Windows NT 6.1; rv:2.0) Gec/20100101 Firefox/4.0" - __cust=000000004A5BB94DD441F61302282103 - - 0.001
- - - [20/May/2011:02:23:45 -0700] "GET /favi.ico HTTP/1.1" 404 56 "-" "Mozilla/5.0 (Windows NT 6.1; rv:2.0) Gec/20100101 Firefox/4.0" - __cust=000000004A5BB94DD441F61302282103 - - 0.001
  很讨厌,为什么会出现这种访问ip为空的现象呢,后来经过分析问题应该出在 $http_x_forwarded_for 这个变量上,因为这个变量获取ip的途径是代理服务器,如果有一些请求没有经过代理服务器而是直接绑定
服务器的host来访问这台服务器的话 $http_x_forwarded_for 根本无法获取到真实的ip地址,所以日志ip地址那里就变成了 “-” ,后来我们用 $remote_addr 就可以得到这个绑定服务器ip 来访问服务器的家伙的ip了。

不过通过代理 访问过来的ip 就获取不到了。怎么办呢?办法来了,写一个if判断,格式如下:

set $remote_addrx $http_x_forwarded_for;if ( $remote_addrx ~ "" ) {set $remote_addrx $remote_addr;}

然后在log_format 里面用新定义的$remote_addrx变量来代替$http_x_forwarded_for就可以了

一、没有使用代理服务器的情况:

REMOTE_ADDR = 您的 IP
      HTTP_VIA = 没数值或不显示
      HTTP_X_FORWARDED_FOR = 没数值或不显示

二、使用透明代理服务器的情况:Transparent Proxies

REMOTE_ADDR = 最后一个代理服务器 IP
      HTTP_VIA = 代理服务器 IP
      HTTP_X_FORWARDED_FOR = 您的真实 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。

三、使用普通匿名代理服务器的情况:Anonymous Proxies

REMOTE_ADDR = 最后一个代理服务器 IP
      HTTP_VIA = 代理服务器 IP
      HTTP_X_FORWARDED_FOR = 代理服务器 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。

四、使用欺骗性代理服务器的情况:Distorting Proxies

REMOTE_ADDR = 代理服务器 IP
      HTTP_VIA = 代理服务器 IP
      HTTP_X_FORWARDED_FOR = 随机的 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。

五、使用高匿名代理服务器的情况:High Anonymity Proxies (Elite proxies)

REMOTE_ADDR = 代理服务器 IP
      HTTP_VIA = 没数值或不显示
      HTTP_X_FORWARDED_FOR = 没数值或不显示 ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

完全用代理服务器的信息替代了您的所有信息,就象您就是完全使用那台代理服务器直接访问对象。

转载于:https://www.cnblogs.com/joshua317/articles/5197865.html

nginx 日志获取不到远程访问ip问题解决相关推荐

  1. ELK采集之nginx 日志高德地图出城市IP分布图

    最近确实忙得像狗一样,很久没有更新博客了.今天有点空闲时间写一些相关的ELK stack的博客:本来想做成一些列,后面有时间的话再更新吧 1.采用拓扑: 角色扮演:  Agent:采用logstash ...

  2. 通过nginx日志统计一段时间内ip的访问次数进行排序访问量统计

    查看nginx日志位置 find / -name access.log grep命令过滤出当天的 cat access.log | grep '2021-03-23' | awk '{print $1 ...

  3. nginx日志分析查询异常请求IP之狙击网络黑客

    1 分析 使用nginx作为web端口分发时,只要请求服务器,nginx便会在access.log与error.log文件中留下记录,包括请求时间.请求方式.浏览器..以及访问的静态文件等信息. 网络 ...

  4. Graylog收集nginx日志做地图事态感知

    文章目录 这个东西有什么用呢 搜集日志的过程如下图 开始部署 在客户端安装 Sidecar 在客户端安装 Filebeat 在Server服务端添加Sidecar 通过Nginx日志做地图标识 这个东 ...

  5. python分析nginx日志

    利用python脚本分析nginx日志内容,默认统计ip.访问url.状态,可以通过修改脚本统计分析其他字段. 一.脚本运行方式 python count_log.py -f med.xxxx.com ...

  6. IIS 7、8启用nginx代理后日志中获取访客真实IP方法

    所需的步骤取决于您的IIS版本.此操作适用iis7之上版本. 1.下载插件F5XForwardedFor.dll:http://download.west263.net/iis7-rewrite%E6 ...

  7. 2.apache模块mod_rpaf ,让nginx代理后端的apache获取访客真是IP

    安装mod_rpaf这个模块      #wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz(下载不了就在百度上找相应的软件 ...

  8. nginx 获取body参数_日志分析系列(外传二):Nginx日志统一化

    本系列故事纯属虚构,如有雷同实属巧合 为了完成对Nginx服务器的日志分析,小B对Q公司的Nginx日志做了统一化要求.下面是小B在统一化过程中遇到的一些知识点: Nginx日志与字段解析 Q公司的N ...

  9. PHP、Tomcat获取Nginx代理后的客户端真实IP

    PHP.Tomcat获取Nginx代理后的客户端真实IP 文章目录 PHP.Tomcat获取Nginx代理后的客户端真实IP 一.PHP获取Nginx代理后客户端真实IP Nginx配置 PHP配置 ...

最新文章

  1. mysql 5.6.15_mysql-5.6.15-win32.zip免安装配置
  2. python简单代码编写-Python | 编写一个简单的Excel处理脚本
  3. java实现十进制与二进制之间的转换
  4. imageio.ffmpeg.download() has been deprecated. Use 'pip install im ageio-ffmpeg' instead.'
  5. java wav 切割_WAV音频定长分段切取
  6. WM_Paint 消息疑问解析
  7. 《Python Cookbook 3rd》笔记(1.10):删除序列相同元素并保持顺序
  8. 前置++与后置++之一道简单的题目引发的思考
  9. 二叉树的深度优先遍历原理及python实现
  10. 7个步骤:让JavaScript变得更好
  11. django实例:创建你的第一个应用投票系统(3)后台管理
  12. 更改MAC终端显示的主机名
  13. docker下beego开发环境搭建
  14. Sublime Text安装与配置
  15. Turkey HSD检验法/W法
  16. mysql和jdbc(韩)
  17. Matplotlib动图:FuncAnimation实现
  18. 微信小程序赋能会员管理和会员营销互动
  19. 【LUTs调色】50个好莱坞电影级别调色预设模板 mLUT Film 3
  20. java 计算年龄_Java根据日期计算年龄——精确到天

热门文章

  1. 使用 gpg 加密文件 - 通过 shell 或 php
  2. 放肆地使用UIBezierPath和CAShapeLayer画各种图形
  3. iOS开发--线程通信
  4. Filter高级开发
  5. RDLC报表系列(二) 行分组
  6. discovery_01
  7. (zz)Sql Server 2005中的架构(Schema)、用户(User)、角色(Role)和登录(Login)(三)
  8. zcmu4959: ly的新闹钟(有个点容易忽略)
  9. 倒计时3天|阿里云数据库创新上云峰会亮点剧透
  10. 《云原生人才计划之Kubernetes 技术图谱》发布!