nginx反向代理java web应用,网页链接的问题
来源:互联网 发布:好考试软件 编辑:程序博客网 时间:2024/06/05 22:53
假如有一个java web应用,地址是10.0.0.1:8080/aaa,用nginx做代理,域名a.com指向nginx,nginx代理发请求给10.0.0.1:8080/aaa.如果jsp中有以下对<base href='">的配置,则会出现网页链接错误的问题:
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<base href="<%=basePath%>">
这是因为basePath变量是由多个从request获取的值组成的,其中String path = request.getContextPath();表明path变量是由上下文路径决定的,而上下文路径是应用在web服务器中设置的,实际上就使应用的目录路径,默认就是应用目录的名称,和http请求无关,因此无论怎样配置nginx,网页的base href中都会带有应用路径/aaa,如果是通过a.com访问的应用,就会出现链接错误,因为对于浏览器来说当前网站的主机名是a.com,但是链接指向的地址是a.com/aaa/*。
解决办法有三个:
1.将应用目录名改为web服务器的默认根目录名,比如tomcat下讲应用目录aaa改为ROOT,这样应用目录就是根目录,通过10.0.0.1:8080即可访问。这样做,path变量就是空字符串,与客户端访问的应用路径一致。
2.去掉base href,链接都写绝对或相对路径。如果写绝对路径则要注意也需要将应用目录改为根目录,因为如果不改为根目录,则绝对路径要写/aaa/*,这样客户端如果通过a.com访问应用,链接显示的地址也是a.com/aaa/*。这个链接错误其实和指定base href出现的错误是同样的原因,因为实际上base href就是将相对路径变为基于主机名和项目名的绝对路径。
3.配置web服务器,通过指定应用目录的虚拟目录,将应用目录设置为根目录。比如在tomcat中配置server.xml:
<Host name="localhost" debug="0" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Alias>localhost.com</Alias>
<Logger className="org.apache.catalina.logger.FileLogger"
directory="logs" prefix="localhost_log." suffix=".txt"
timestamp="true"/>
<Context path="" docBase="F:\tomcat\webapps\aaa" reloadable="true" caseSensitive="false" debug="0"></Context>
</Host>
其中Context path="" 将应用目录设置为根目录,这样访问10.0.0.1:8080即可访问应用。和方法1解决问题的原理相同,都是让应用访问路径为根目录,只是实现方式不同。
- nginx反向代理java web应用,网页链接的问题
- Nginx作为反向代理的简单应用
- Nginx反向代理的简单配置应用
- Nginx反向代理的目录访问问题
- Nginx 反向代理碰到的问题
- Nginx反向代理关于端口的问题
- nginx反向代理,request.getServerName()的问题
- Nginx反向代理关于端口的问题
- Nginx反向代理关于端口的问题
- Nginx反向代理关于端口的问题
- nginx反向代理,丢失域名的问题
- nginx 反向代理 golang web
- nginx的反向代理
- nginx的反向代理
- Nginx的反向代理
- nginx的反向代理
- nginx学习(一)简单的反向代理应用 nginx反向代理访问tomcat
- 解决nginx反向代理django应用非80端口,跳转错误的问题
- [php] 设计模式之 组合模式
- java多态性
- 简单文本处理小工具
- Head First 设计模式 里面的设计原则总结 MindJet整理
- Leetcode 183. Customers Who Never Order
- nginx反向代理java web应用,网页链接的问题
- 蒙特卡洛模拟
- 10010---关于Java并发编程的总结和思考
- WPF
- 软件开发流程个人理解
- R语言导出数据
- TOJ 2226.Parliament
- JVM中的内存分配(对象的存储)
- csdn-markdown字体颜色和背景色设置