文档章节

nginx前端代理tomcat取真实客户端IP

烽焱10仴
 烽焱10仴
发布于 2014/11/14 16:06
字数 355
阅读 1129
收藏 40
点赞 0
评论 0

使用Nginx作为反向代理时,Tomcat的日志记录的客户端IP就不在是真实的客户端IP,而是Nginx代理的IP。要解决这个问题可以在Nginx配置一个新的Header,用来存储$remote_add,然后再Tomcat获取记录这个值。

新增nginx配置。

server {
    listen 80;
    server_name www.xxxxx.com;
    location / {
        proxy_pass http://IP:8080/;
        proxy_set_header X-Real-IP $remote_addr;
        }
}



其实就是新增了一个名为X-Real-IP值为真实客户端IP的头信息。

可以参见:http://wiki.nginx.org/NginxHttpProxyModule

修改tomcat日志配置:(<host></host>中间)


<Valve className="org.apache.catalina.valves.AccessLogValve"  directory="logs"  prefix="tomcat_access_log." suffix=".txt"  pattern="%a %r %t %{X-Real_IP}i" resolveHosts="false"/>



可以参见: http://www.docjar.org/docs/api/org/apache/catalina/valves/AccessLogValve.html

没有Nginx这一层的时候直接用%a就可以获得客户端IP,现在我们得用%{X-Real-IP}i 来获得真实的IP了。

nginx+(1…n)tomcat集群部署时,后端tomcat需要取得用户的IP,这时通过 request.getRemoteAddr()取得的始终是127.0.0.1.


由于用户请求经过nginx,ngigx转发了请求到tomcat后,tomcat取得的始终是nginx的Ip,如果需要取得真实用户IP,只需要在ngix上做些配置。


location / 下设置
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header Host $host;
 


测试配置:./sbin/nginx -t -c conf/nginx.conf  正确后重启nginx.


Java代码修改如下


out.println("X-Real-IP : " + request.getHeader("X-Real-IP") + "<br>"); 


其中X-Real-IP即用户真实IP


© 著作权归作者所有

共有 人打赏支持
烽焱10仴
粉丝 6
博文 44
码字总数 19836
作品 0
大兴
技术主管
nginx 反向代理使apache或者tomcat日志中无法获取真实IP 的 X-Forwarded-For 参数的设定

环境: nginx做反向代理 后端apache 。 apache日志中默认有%h来指定来访客户端你的ip地址,但是使用了nginx代理上网则%h获得的ip地址会不准。 这就需要对nginx 和apache的配置文件设定 X-Fo...

weijixian1015
06/26
0
0
WordPress+Nginx+proxy取得真实IP

如果WordPress运行在Nginx作为proxy代理的后端,那么,WP会默认取得$SERVER['remoteaddr']的IP地址.其实这个IP地址是前端Nginx的IP地址,是不对的.如何才能使WordPress取得真实IP地址呢?方法很简...

随影求是
2012/10/09
0
0
nginx做负载CDN加速获取端真实ip

在不用cdn的情况下,nginx做负载获取真实ip时,nginx配置如下: proxysetheader Host $host;proxysetheader X-Real-IP $remote_addr;proxysetheader X-Forwarded-For $proxyaddxforwardedfo......

lavafree
2012/12/22
0
0
nginx做负载CDN加速获取端真实ip

在不用cdn的情况下,nginx做负载获取真实ip时,nginx配置如下: proxysetheader Host $host; proxysetheader X-Real-IP $remote_addr; proxysetheader X-Forwarded-For $proxyaddxforwarded......

随影求是
2012/10/04
0
0
使用nginx和tomcat搭建集群环境

一、先解释下什么是反向代理 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet上...

三平行者
2016/03/11
1K
1
apache代理时java获取IP的问题

x-forwarded-for的深度挖掘 如今利用nginx做负载均衡的实例已经很多了,针对不同的应用场合,还有很多需要注意的地方,本文要说的就是在通过CDN 后到达nginx做负载均衡时请求头中的X-Forward...

找寻
2011/06/30
0
0
客户端的IP地址伪造、CDN、反向代理、获取的那些事儿

20120917 @郑昀汇总 外界流传的JAVA/PHP服务器端获取客户端IP都是这么取的: 伪代码: 1)ip = request.getHeader("X-FORWARDED-FOR") 可伪造,参考附录A 2)如果该值为空或数组长度为0或等于...

旁观者-郑昀
2012/10/11
0
0
怎样正确设置remote_addr和x_forwarded_for获取用户真实IP

做网站时经常会用到和这两个头信息来获取客户端的IP,然而当有反向代理或者CDN的情况下,这两个值就不够准确了,需要调整一些配置。 什么是remoteaddr remoteaddr代表客户端的IP,但它的值不...

星逝流
2015/11/11
0
0
Nginx 反向代理学习及实例笔记

背景 前几天在学习负载均衡的知识,遇到了 Nginx 反向代理 的概念,其实在年初就写过一次 Nginx 反向实例的笔记,今天翻看发现很是潦草,而且当时的编辑器也不满足Markdown,作为尴尬症晚期的...

moTzxx
2017/11/23
0
0
Nignx 连接tomcat时粘滞会话问题分析及解决方法

在多台后台服务器的环境下,我们为了确保一个客户只和一台服务器通信,我们势必使用长连接。使用什么方式来实现这种连接呢,常见的有使用nginx自带的ip_hash来做,我想这绝对不是一个好的办法...

xiaoxiongmao8
2017/02/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

如何进行大数据的入门级学习?

不知道你是计算机专业应届生还是已经从业者。总之,有java基础的学生学习大数据会轻松很多,零基础的小白都需要从java和linux学起。 如果你是一个学习能力特别强,而且自律性也很强的人的话可...

董黎明
7分钟前
0
0
使用Parcelable传递复杂参数

最近做AIDL传递对象,对象必须实现Parcelable的方法才可以被传递。 @Override    public int describeContents() {//这个 默认返回0就行了。        return 0;    }    ...

火云
8分钟前
0
0
十大Intellij IDEA快捷键

Intellij IDEA中有很多快捷键让人爱不释手,stackoverflow上也有一些有趣的讨论。每个人都有自己的最爱,想排出个理想的榜单还真是困难。以前也整理过Intellij的快捷键,这次就按照我日常开发...

HJCui
18分钟前
0
0
word 使用mathtype 编写 数学公式

下载安装,这个链接命名。。。。 http://www.mathtype.cn/xiazai.html 安装之后会多出一个选项 使用内联方式插入图表 编写公式的界面 设置支持latex 语法 输入公式回车就可以看到结果...

阿豪boy
37分钟前
0
0
Promise

定义 Promise是异步编程的一种解决方案,所谓Promise就是一个容器,里面保存着某个未来才会结束的事件(通常是一个一步操作)的结果。 特点: 2.1 对象的状态不受外界影响,三种状态pending...

litCabbage
48分钟前
0
0
设计模式:适配器模式

说明:在不改变旧接口代码的前提下,为该接口新增其他接口的功能 适配器模式可以分为:类适配器模式、对象适配器模式、接口适配器模式 前两种模式下,我会以播放器为例。老版的播放器(Playe...

人觉非常君
48分钟前
0
0
使用VsCode搭建Java开发环境,创建springboot应用

1、在 Visual Studio Code 中打开扩展视图(Ctrl+Shift+X),输入关键词java、spring分别下载Java开发插件包和springboot插件包 2、配置参数 点击设置按钮,进入设置选项,配置用户设置 在用户...

qsyan
52分钟前
21
0
调教属于你的“贾维斯”(给自己挖了一个很大的坑)

今天玩一下现在很火的人工智能。 废话不多说,先来看几张图: 看出什么蹊跷了吗? 再来看一个视频: https://www.zhihu.com/video/1002567561061511168 (演示网址和代码见文末) 人工智能离...

crossin
57分钟前
1
0
ES10-检索入门

1.创建索引,准备数据 定义索引结构 DELETE telegraphPUT telegraph{ "mappings": { "msg":{ "properties": { "title":{ "type": "text", ...

贾峰uk
今天
1
0
css 三角形

1.无边框三角形 条件:width,height设置为0,border-width设置一定的宽度,border-color保留一边有颜色其他三边设置透明 .triangle{ width:0px; height:0px; border-width:40...

爱喝水的小熊
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部