我试图在Apache服务器中设置一个代理,但是我有一个关于URL构建的问题,因为路径的URL部分丢失了。举个例子:
http://server/webapp/style.css (预期)
http://server/style.css (实数)
我在web上公开了一台服务器(我将称之为前端服务器),以及内部网络中的另一台服务器(后端服务器)(无法从web访问),其中有我想在外部代理的web应用程序。我尝试了一些方法,主要问题是在代理中,URL不是以正确的方式(re)-written,服务器或浏览器遗漏了一部分。
我试过的是:
ProxyPass /webapp http://backendserver
ProxyPassReverse /webapp http://backendserver浏览器中应用程序的URL是正确的http://frontendserver/webapp;index.html是可见的,但所有附加的资源(js、套接字、css等等)都是可见的。因为它们的URL是http://frontendserver/style.css而不是http://frontendserver/webapp/style.css,所以会丢失。
这是正确的方法来正确设置这种类型的代理吗?
我也用Apache重写模块尝试过其他的解决方案,但是我没有达到一个好的结果,也许有人有一个很好的建议来解决这个问题。
谢谢
发布于 2020-12-21 15:21:36
ProxyPass会改变URL的应答方式,但它不会重写index.html中的URL。要解决这个问题,您的选项是:
css/style.css)而不是绝对链接(/css/style.css),因此它们仍然可以从不同的URL库工作。第一种解决方案是最好的,如果您可以轻松做到这一点,因为它使您的内容可移植,而且更可靠。
如果内容中的所有URL都是静态的,第二种解决方案可能对您有效。但是mod_proxy_html对动态计算的URL一无所知--例如,如果在Javascript中计算URL。因此,在这种情况下,除非您还修改代码以使用动态URL库,否则它将失败。
https://serverfault.com/questions/1045546
复制相似问题