apache反向代解决绝对路径可能出现的问题

本文介绍了在Apache2作为反向代理服务器时如何正确处理应用中绝对路径和request.getContextPath()的问题,通过使用ProxyPreserveHost指令而非ProxyHtml,确保客户端能够正确访问到资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Apache2在对应用做反向代理的时候,如果应用的页面中引用的连接或者是资源的地址是相对地址的话,是没有问题的,当应用中引用的地址是绝对地址(比如:)或者是request.getContextPath()的话(比如,页面的一个资源的链接是:aa.jpg),就可能会遇到把这个绝对地址返回给前端的问题,而前端实际上是访问不到这个实际的地址的,这样就会导致资源无法加载

网上有人提出使用ProxyHtml来把生成的html页面中这样的地址给替换掉(原理应该是做字符串的替换)
但是,使用ProxyHtml同样会遇到两个问题

1.无法把所有的地址都给替换掉,比如,写在js里的地址就不能完全替换掉

2.替换了之后,会导致contentLength变化,客户端浏览器如果依靠contentLength来做判断的话,就不准了

更好的解决的方式,是把客户端请求的原始的主机头信息传过去,使用ProxyPreserveHost 指令

407044-20171017100656552-49719694.png

ProxyPreserveHost On

就相当于在nginx中的:

proxy_set_header        Host $host;  
proxy_set_header        X-Real-IP $remote_addr;  
proxy_set_header        Destination $fixed_destination;

改完之后,重启一下apache,页面中引用的绝对地址和request.getContextPath()在返回到客户端的时候,就会变成正确的,客户端可以访问到的地址了。

关键字:apache ,反向代理,绝对路径,request.getContextPath(),ProxyHtml,ProxyPreserveHost

转载于:https://www.cnblogs.com/jiaoyiping/p/7554859.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值