Apache2在对应用做反向代理的时候,如果应用的页面中引用的连接或者是资源的地址是相对地址的话,是没有问题的,当应用中引用的地址是绝对地址(比如:)或者是request.getContextPath()的话(比如,页面的一个资源的链接是:),就可能会遇到把这个绝对地址返回给前端的问题,而前端实际上是访问不到这个实际的地址的,这样就会导致资源无法加载
网上有人提出使用ProxyHtml来把生成的html页面中这样的地址给替换掉(原理应该是做字符串的替换)
但是,使用ProxyHtml同样会遇到两个问题
1.无法把所有的地址都给替换掉,比如,写在js里的地址就不能完全替换掉
2.替换了之后,会导致contentLength变化,客户端浏览器如果依靠contentLength来做判断的话,就不准了
更好的解决的方式,是把客户端请求的原始的主机头信息传过去,使用ProxyPreserveHost 指令
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现