Tomcat获取Nginx反向代理的客户端域名
问题
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" />
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接
- Tomcat支持https访问的步骤讲解
- Tomcat+Mysql高并发配置优化讲解
- Tomcat默认程序发布路径的使用与修改方法讲解
- Idea配置maven-tomcat-plugin插件实现项目部署
- Intellij idea下使用不同tomcat编译maven项目的服务器路径方法详解
- IDEA导入eclipse项目并且部署到tomcat的步骤详解
- Tomcat和Spring中的事件机制深入讲解
- 解决Eclipse Tomcat OutOfMemoryError:PermGen space的问题
- Spring Boot使用Thymeleaf + Gradle构建war到Tomcat
- Tomcat中的Connector配置讲解
相关文章
IDEA2022创建Web项目配置Tomcat的详细图文说明
因为学习JavaEE需要配置Tomcat,所以抽出时间对IDEA进行配置与创建,下面这篇文章主要给大家介绍了关于IDEA2022创建Web项目配置Tomcat的详细图文说明,需要的朋友可以参考下2023-04-04idea专业版和idea社区版整合Tomcat并将war包部署
IDEA是一个功能完善的Java开发工具,除了具备有良好的代码开发提示之外,还可以直接在IDEA中集成并启动Tomcat实现程序的自动部署,本文主要介绍了idea专业版和idea社区版整合Tomcat并将war包部署,感兴趣的可以了解一下2023-11-11Tomcat之web应用的目录组成结构_动力节点Java学院整理
这篇文章主要介绍了Tomcat之web应用的目录组成结构,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-07-07
最新评论