apache反向代理tomcat时x-forwarded-for为null的问题

原创 2015年11月19日 13:20:50

apache 在用ProxyPass时会自动在header中设置X-Forwarded-For X-Forwarded-Host和X-Forwarded-Server (http://httpd.apache.org/docs/2.2/mod/mod_proxy.html)


如果tomcat后端不做设置, 在jsp中用out.println("x-forwarded-for:" + request.getHeader("x-forwarded-for") + "<br>");能获取到客户ip,

由于在用nginx做前置代理时为了https也能访问,要让out.println("x-forwarded-proto:" + request.getHeader("x-forwarded-proto") + "<br>");能获取到真实的值需要在tomcat的server.xml

中设置value:

<Valve
        className="org.apache.catalina.valves.RemoteIpValve"
        remoteIpHeader="x-forwarded-for"
        protocolHeader="x-forwarded-proto"
      />

这样设置后的tomcat,用于Apache做前置代理时request.getHeader("x-forwarded-for")获取到null。在https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/valves/RemoteIpValve.html

中有:


所有在tomcat的server.xml中设置了上述参数后会造成request.getHeader("x-forwarded-for")获取的值为null,但用request.getRemoteAddr()就能获取真实客户ip了。

另外要用request.getHeader("x-forwarded-proto")获取值需要在apache设置中加入RequestHeader set X-Forwarded-Proto "https"(在https的设置中,在http设置中用http)


关于HTTP_X_FORWARDED_HOST

今天在看Xweibo的源码,发现了用$_SERVER['HTTP_X_FORWARDED_HOST']来判断主机的地址,就目前来说很多人都是直接通过$_SERVER['HTTP_HOST']来判断的,...

关于HTTP_X_FORWARDED_HOST

今天在看Xweibo的源码,发现了用$_SERVER['HTTP_X_FORWARDED_HOST']来判断主机的地址,就目前来说很多人都是直接通过$_SERVER['HTTP_HOST']来判断的,...
  • xanxng
  • xanxng
  • 2012年05月24日 11:45
  • 2539

PHP的$_SERVER['HTTP_HOST']获取服务器地址功能详解,$_SERVER['HTTP_X_FORWARDED_HOST']

uchome的index文件中的二级域名功能判断,使用了php的$_SERVER['HTTP_HOST'],开始对这个不是很了解,所以百度了一下,发现一篇帖子有点意思,转发过来做个记录。 在ph...

request.getRemoteAddr()问题及解决办法 X-FORWARDED-FOR

Java获取IP地址:request.getRemoteAddr()警惕 项目中需要和第三方平台接口,加了来源IP鉴权功能,测试时发现没有问题,但是部署以后发现存在问题,一直鉴权不通过,...
  • xwq911
  • xwq911
  • 2016年04月29日 14:57
  • 458

request.getHeader("x-forwarded-for") = null ?

request.getHeader(“x-forwarded-for”) = null ? 在使用Nginx代理网络请求时,设置proxy_set_header X-Forwarded-For $p...
  • nlgshw
  • nlgshw
  • 2017年03月12日 14:12
  • 815

阿里云X-Forwarded-For 发现tomcat记录的日志全部来自于SLB转发的IP地址,不能获取到请求的真实IP。

1、背景:阿里云的SLB的负载均衡,在tomcat中获取不到真实IP,而是阿里的内网IP,SLB中俩台或者3台本身是局域网,这里是SLB原理,可以看看,没怎么看懂,呵呵,要细细读下。 2、需要开启...

Nginx + Tomcat + HTTPS 配置不需要在 Tomcat 上启用 SSL 支持

最近做了个Web项目, 架构上使用了 Nginx +tomcat 集群, 且全站HTTPS,用nginx 做负载,nginx和tomcat 使用内网http通信,遇到http css,js静态资源被浏...
  • vfush
  • vfush
  • 2016年04月07日 15:20
  • 11950

获得用户真实IP的四种方法

在web开发时有时需要验证用户的真实IP,在Java开发中,使用request.getRemoteAddr() 得到的可能是request路经的代理(Proxy)或者负载平衡器(Load Balanc...

x-forward-for获取客户端真实ip

文章来源:http://www.360doc.com/myfollow.aspx 先来看一下X-Forwarded-For的定义: X-Forwarded-For:简称XFF头,它代表客户...
  • na_tion
  • na_tion
  • 2015年06月22日 20:48
  • 4796

Tomcat Access Log记录X-Forwarded-For

在实际使用中,使用F5或LVS为tomcat做负载均衡时,由于做了反向代理,tomcat记录的Aceess Log中,会将客户端ip记录为F5或lvs的ip,导致无法正常记录访问者的真实ip信息. T...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:apache反向代理tomcat时x-forwarded-for为null的问题
举报原因:
原因补充:

(最多只允许输入30个字)