获取用户真实IP:(模拟:客户端--F5--nginx--tomcat 后端获取用户真实IP)
模拟:客户端--F5--nginx--tomcat 后端获取用户真实IP
192.168.109.137 :nginx01(充当第一层代理==F5)
192.168.109.138 :nginx02(二层代理,业务转发)
192.168.109.139 :tomcat (后端业务层)
192.168.109.1 :客户端IP
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一。安装好访问如图:

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
二。配置代理查看效果,以及日志
1。 192.168.109.137 将所有请求代理到二级代理192.168.109.138去(proxy_pass http://192.168.109.138;)效果如下:

192.168.109.137:tail -f access.log

192.168.109.138:tail -f access.log

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
三。设置日志打印格式,以及ip
1.一级代理192.168.109.137 nginx(F5)设置:

以下分别解释并测试效果:
1.proxy_set_header Host $host; 或者 proxy_set_header Host $host:$proxy_port; ($host代表转发服务器,$proxy_port代表137转发服务器请求后端服务器的端口,也就是80)
$host :$proxy_port指的的就是转发服务器【192.168.109.137 nginx(F5)】的servername 和监听端口,我这里配置的是listen 80;server_name 192.168.109.137;
在192.168.109.138的nginx日志打印中加入$http_host ' log_format main '....$http_host '
测试:




2.proxy_set_header X-Real-IP $remote_addr;
将$remote_addr的值放进变量X-Real-IP中,此变量名可变,$remote_addr的值为客户端的ip
一级代理nginx(F5)的日志配置:
log_format main '$remote_addr - $remote_user [$time_local] "$request" $http_host '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
二级代理nginx02的日志配置如下:(两者区别在于"$http_x_real_ip",添加了这个变量的值)
log_format main '$remote_addr "$http_x_real_ip" - $remote_user [$time_local] "$request" "$http_host" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
继续测试:




3.proxy_set_header X-Forwarded-For $remote_addr; 与 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
两者的区别:
在只有一个代理服务器的转发的情况下,两者的效果貌似差不多,都可以真实的显示出客户端原始ip
但是区别在于:
$proxy_add_x_forwarded_for变量包含客户端请求头中的"X-Forwarded-For",与$remote_addr两部分,他们之间用逗号分开。
继续测试:
一级代理nginx(F5)日志配置:
log_format main '$remote_addr - $remote_user [$time_local] "$request" $http_host '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
二级代理nginx02日志配置:
log_format main '$remote_addr "$http_x_real_ip" - $remote_user [$time_local] "$request" "$http_host" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';



-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.二级代理192.168.109.137 nginx02设置:

set_real_ip_from 是指接受从哪个信任前代理处获得真实用户ip
real_ip_header 是指从接收到报文的哪个http首部去获取前代理传送的用户ip
real_ip_recursive on; #递归的去除所配置中的可信IP。排除set_real_ip_from里面出现的IP。如果出现了未出现这些IP段的IP,那么这个IP将被认为是用户的IP
注意:后端tomcat 一般是通过X-FORWARDED-FOR拿取客户端真实IP
tomcat日志打印配置:
vim server.xml
pattern="%{X-FORWARDED-FOR}i %h %l %u %t "%r" %s %b" />
pattern参数详解参考:http://sofar.blog.51cto.com/353572/1712069/
获取用户真实IP:(模拟:客户端--F5--nginx--tomcat 后端获取用户真实IP)的更多相关文章
- Nginx反向代理+Tomcat+Springmvc获取用户访问ip
Nginx+Tomcat+Springmvc获取用户访问ip 1.Nginx反向代理 修改Nginx配置文件 location / { ***********之前代码*******; proxy_se ...
- HappyAA服务器部署笔记1(nginx+tomcat的安装与配置)
这是本人的服务器部署笔记.文章名称叫"部署笔记1"的原因是之后我对这个进行了改进之后,会有"部署笔记2","部署笔记3"...循序渐进,估计 ...
- Nginx+Tomcat实现动静分离和负载均衡
一.什么是动静分离? Nginx动静分离简单来说就是把动态和静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离.严格意义上说应该是将动态请求和静态请求分开,可以理解成使用Nginx处理静态 ...
- centos6 Nginx+Tomcat负载均衡配置
一.Nginx简介 Nginx是一个web服务器也可以用来做负载均衡及反向代理使用,目前使用最多的就是负载均衡,具体简介我就不介绍了百度一下有很多,下面直接进入安装步骤 二.Nginx安装 1.下载N ...
- F5后端nginx+tomcat应用如何获得用户的真实ip【转】
根据业务需要要求记录每个通过wap或者客户端访问我们服务器的用户真实ip但是由于业务前端部署了两个3900系列的F5设备导致程序一直获得F5设备自身的ip,所以笔者考虑可能是因为F5导致无法获得用户的 ...
- 深入nginx之《获取用户的真实IP》
获取用户的真实IP Nginx会将客户端的IP信息存放在$remote_addr变量里,但这并不意味着它就是客户端的IP,生产环境往往会充满各种代理,让IP的来龙去脉变得扑朔迷离. 目前互联网公司基本 ...
- nginx反向代理获取用户真实ip
nginx做反向代理时,默认的配置后端获取到的ip都是来自于nginx,如何转发用户的真实ip到后端程序呢?如是是java后端,用request.getRemoteAddr();获取到的是nginx的 ...
- nginx+tomcat集群配置(3)---获取真实客户端IP
前言: 在初步构建的nginx+tomcat服务集群时, 发现webserver获取到的客户端ip都是同一个, 皆为作为反向代理服务的nginx所在的机器IP. 这不太符合我们的基本需求, 为将来的数 ...
- X-Forwarded-For 负载均衡 7 层 HTTP 模式获取来访客户端真实 IP 的方法(IIS/Apache/Nginx/Tomcat)
https://help.aliyun.com/knowledge_detail/13051859.html?pos=1 1.IIS 6 配置方案2.IIS 7 配置方案3.Apache 配置方案4. ...
随机推荐
- 转载--C 的回归
转载自http://blog.codingnow.com/2007/09/c_vs_cplusplus.html 周末出差,去另一个城市给公司的一个项目解决点问题.回程去机场的路上,我用手机上 goo ...
- 3D Computer Grapihcs Using OpenGL - 03 OpenGL Buffer Data
本节绘制一个三角形,并讲解Buffer Object-缓冲对象 OpenGL的窗口坐标 屏幕中心为坐标原点,横向朝右为x正方向,纵向朝上为y正方向,最大值最小值分别为1,-1. Buffer Obje ...
- D2. Remove the Substring (hard version)
D2. Remove the Substring (hard version) 给字符串s,t,保证t为s的子序列,求s删掉最长多长的子串,满足t仍为s的子序列 记录t中每个字母在s中出现的最右的位置 ...
- MySQL删除外键约束问题
当我们在一个表中添加字段约束的时候: ALTER TABLE product ADD CONSTRAINT product_fk FOREIGN KEY(category_id) REFERENCES ...
- shell 操作字符串 变量 数组
#!/bin/bash name="jack" #使用双引号拼接 #greeting="hello,"$name"!" #greeting_ ...
- 随机访问RandomAccessFile
public native long getFilePointer() throws IOException;//当前文件的指针位置是 import java.io.IOException; impo ...
- github.com/oschwald/maxminddb-golang 安装报错
安装 maxminddb-golang错误: dill@ubuntu-vm:~/workspace/go/src/github.com$ go get github.com/oschwald/maxm ...
- 观察者模式(jdk实现)
1.定义 在对象中定义一对多的依赖,当一个对象改变状态,依赖它的对象会收到通知并更新. 2.实现 (主要通过jdk自己定义的观察者实现) 以气象站通知展示板为例子,当气象站收到的各种参数改变的时候 ...
- 应用安全 - 代码审计 - PHP
RCE RCE函数 eval.preg_replace + /e模式.assertJavascript:evalVbscript: Execute.EvalPython:exec <?php i ...
- JS和C#后台获取网站URL
例:网页URL : http://localhost:8086/index.aspx?topicId=361 1.设置或获取 href 属性中跟在问号后面的部分:window.location.se ...