时间:2021-05-19
问题
Nginx反向代理之后,Tomcat应用通过request.getHeader("host")取到的是Nginx的host,并非客户端浏览器地址栏上的真实域名。
例如在某一台服务器上,Tomcat的端口号为8080,Nginx的端口号为80,Nginx反向代理8080端口。
server { listen 80; location / { proxy_pass http://127.0.0.1:8080; }}在另一台机器上用浏览器打开http://haha/test访问Tomcat下的应用,获取客户端域名。
System.out.println(request.getHeader("host"));结果是:
localhost:8080
问题产生的原因
Nginx的反向代理实际上是客户端和真是的应用服务器之间的一个桥梁,客户端(一般是浏览器)访问Nginx服务器,Nginx再去访问Web应用服务器。对于Web应用来说,这次HTTP请求的客户端是Nginx而非真实的客户端浏览器,如果不做特殊处理的话,Web应用会把Nginx当做请求的客户端,获取到的客户端信息就是Nginx的一些信息。
问题解决
Nginx配置HTTP Header。Host包含客户端真实的域名和端口号
proxy_set_header Host $http_host;Tomcat从Nginx传递过来的HTTP Header中获取客户端信息。
<Valve className="org.apache.catalina.valves.RemoteIpValve" />总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
如果你的tomcat应用需要采用ssl来加强安全性,一种做法是把tomcat配置为支持ssl,另一种做法是用nginx反向代理tomcat,然后把nginx配置
上一篇文章介绍了nginx的基本配置和使用方法,并且简单的介绍了一下如何利用nginx结合tomcat进行使用,达到反向代理的作用。现在我们要使用nginx达到
在实际生产中,Tomcat服务器一般不单独使用在项目中,对于静态资源的响应Nginx表现的比较好,另外由于nginx是专门用于反向代理的服务器,所以很容易实现将
在PHP获取客户端IP中常使用$_SERVER["REMOTE_ADDR"]。(1)但如果客户端是使用代理服务器来访问,那取到的是代理服务器的IP地址,而不是真
在用nginx的反向代理tomcat的路径中,可能会出现session丢失问题。每发送一次请求JESSIONID都会发生改变,说明上一次形成的session丢失