nginx 日志获取不到远程访问ip问题解决

公司有一个应用,后端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。    完全用代理服务器的信息替代了您的所有信息,就象您就是完全使用那台代理服务器直接访问对象。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java编程技术

UML建模(组件图)

组件图是为了展示组元(components),组元提供的接口(provided inerfaces)和需要调用的接口(required interfaces),...

6162
来自专栏知识分享

ESP8266使用详解--基于Lua脚本语言ESP8266刷AT固件与nodemcu固件轻松使用8266

这些天,,,,今天终于看到了希望,,,天道酬勤 先说实现的功能...让ESP8266连接无线网,然后让它建立服务器,,我的客户端连接上以后,发给客户端发数据模块...

4.1K4
来自专栏贾鹏辉的技术专栏@CrazyCodeBoy

React Native发布APP之签名打包APK

React Native发布APP之签名打包APK ---- 用React Native开发好APP之后,如何将APP发布以供用户使用呢?一款APP的发布流程...

2625
来自专栏小巫技术博客

Android Library上传到JCenter仓库实践

1094
来自专栏黑泽君的专栏

安装了 git、小乌龟(TortoiseGit) 、 Git for Windows 或者 GitHub Desktop ,在使用它们之后,文件夹图标出现 红色! 绿色√ 蓝色? 的git附加标

安装了 git、小乌龟(TortoiseGit) 、 Git for Windows 或者 GitHub Desktop ,在使用它们之后,文件夹图标出现  红...

4881
来自专栏hotqin888的专栏

ONLYOFFICE协作编辑页面中文档下载地址url携带(传输)sessionid测试

onlyoffice协作页面里有个文档下载地址,这个地址是第一个人打开这个文档的时候,服务器会根据这个文档地址,将文档管理服务器里的文档下载到onlyoffic...

1781
来自专栏FreeBuf

初探伪装在Office宏里的反弹Shell

通常的钓鱼邮件场景中office的安全问题一直都受到关注,恶意宏文档制作简单,兼容性强,并且攻击成本较小,所以整体占比较大。但是使用恶意宏进行攻击,往往需要用户...

1082
来自专栏.Net移动开发

关于发布IOS的方法(本人亲身经历折腾很久终于成功)

前情提要:这位.NET程序员兄弟使用Smobiler开发了一个APP,尽管Smobiler云平台已经最大限度的简化了iOS应用的打包操作,但仍绕不开苹果公司强制...

1521
来自专栏何俊林

Android组件化项目详细实施方案

导读:组件化,插件化开发,将是未来Android中不可或缺的一环。今天来自张华洋的分享,张华洋的blog地址:http://blog.csdn.net/guiy...

2486
来自专栏Android干货

Android项目实战(三十八):2017最新 将AndroidLibrary提交到JCenter仓库(图文教程)

2857

扫码关注云+社区

领取腾讯云代金券