博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用LVS或者阿里云的SLB后如何获取访客真实的IP地址
阅读量:6244 次
发布时间:2019-06-22

本文共 1078 字,大约阅读时间需要 3 分钟。

阿里云服务器使用SLB后如何获取真实IP(使用LVS等负载均衡方案之后如何获取真实的IP)

使用7层负载均衡之后最终realserver的访问都是由proxy发起的,所以日志中记录的访问IP都是proxy的IP,这时候如果想获取真实IP,提供了使用 http_realip_module或者mod_rpaf来获取真实IP(这种办法除了可以获取IP记录到日志中,还可以禁止特定IP访问站点),这种方法有个弊病就是需要配置文件里面把proxy的请求IP全写进去,而且如果SLB的服务器集群扩容,而你不知道, 那么很可惜扩容的服务器发起的请求,在您的日志中记录的都是他的服务器IP而不是访客的ip~~

其实不用那么复杂,SLB服务器会把客户的真实IP记录在http头X_FORWARDED_FOR 字段中。

实际apache和nginx都是可以直接读取http头中任何字段值的,所以可以在logformat中配置X_FORWARDED_FOR 这个字段,测试情况如下:

Apache:

日志格式配置

图片

grey.gif

LogFormat “‘realip:’%{X-Forwarded-For}i ‘slbip:’%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”” combined

重启apache后测试可以获取到真实IP,情况如下:

图片

其中有realip还是-的记录,记录是SLB服务器健康检查的记录并不是客户访问的记录,可以忽略。

grey.gif

Nginx

日志配置情况如下:

图片

grey.gif

  log_format  main  ‘realip:$http_x_forwarded_for slbip:$remote_addr – $remote_user [$time_local] “$request” ‘

‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” “$http_x_forwarded_for”‘;


测试后可以获取真实的IP,情况如下:

图片

grey.gif

同上,没获取到realip的都是健康检查的记录,不是客户访问的记录,可以忽略。

这个方法非阿里云官方提供的,我在自己的几台服务器测试都完全没问题,不知道阿里云官方处于什么目的没有推荐这种方法。

应该有一些弊端吧,总之,如果这种方法你测试可以满足你的需求,那么你可以尝试一下~~

本文转自 holy2009 51CTO博客,原文链接:http://blog.51cto.com/holy2010/1934419

转载地址:http://dzvia.baihongyu.com/

你可能感兴趣的文章
tab选项卡前后有向前和向后按钮,点击实现上一个下一个
查看>>
iterm2远程ssh连接服务器乱码问题
查看>>
Spring singleton bean 与 prototype bean 的依赖
查看>>
MYSQL主从不同步延迟原理分析及解决方案
查看>>
使用LeakTracer检测android NDK C/C++代码中的memory leak
查看>>
软件即服务或将使本地Linux应用开发停速
查看>>
Python的学习笔记16------urllib
查看>>
深度剖析安卓Framebuffer设备驱动
查看>>
C/C++那些事儿之 数的转换
查看>>
用ViewPager实现欢迎引导页面
查看>>
ffmpeg源码分析 (三)
查看>>
Oracle11g x64使用Oracle SQL Developer报错:Unable to...
查看>>
概率论与数理统计14--方差
查看>>
关于PHP中按位取反问题
查看>>
scrapy爬取某网站,模拟登陆过程中遇到的那些坑
查看>>
设计师的知识管理
查看>>
Struts中ActionForm的作用
查看>>
昨天开始学习安卓
查看>>
centos 7 chrome安装
查看>>
为什么单个TCP连接很难占满带宽
查看>>