我们正在努力解决以下问题,试图理解处理这个问题的最佳方式。 总的目标是这样的:
--> example.com/app1 --> app1.com/ --> example.com/app1/images --> app1.com/images --> example.com/app2 --> app2.com/ --> example.com/app2/images --> app2.com/images --> example.com/app3 --> app3.com/ --> example.com/app3/images --> app3.com/images
我们已经考虑了以下解决scheme,其中一些工作,其他人不工作。 我们试图找出最好的办法是什么,因为我们绝不是专家。 到目前为止,我们使用的工具是Nginx来做反向代理,但这个工具并不重要,我们对任何东西都是开放的。
Nginx重写正文文本,为app1请求添加“app1”等。正如上面的例子,有一个请求app1和一个index.html返回。 index.html又有一些标签,看起来像<img src="images/hello.png" />文件。 这显然是行不通的,所以我们重写body(即index.html)来说<img src="app1/images/hello.png" /> 。
我们必须非常善于制定机构重写规则,否则我们可以重写我们不打算的东西,然后打破一些JS或HTML。 这个解决scheme也不适用于一些JS代码(我们使用的是Angular),它并不隐式地写出视图的位置,而是由框架本身组合在一起。
将每个应用程序从根移到它自己的文件夹。 这意味着任何img或其他请求都会更新到<img src="app1/images/hello.png" /> 。
我们必须改变所有现有的3个网站,从各自的新根源请求资源。
任何帮助将不胜感激,在此先感谢。
理想情况下,您可以重新部署应用程序,使每个应用程序都安装在http://app<n>.com/app<n>而不是文档根目录中。
如果没有,也许你可以有相关的链接,而不是链接到images/logo.png或../../images/logo.png在提供的页面上,这将正确翻译在反向代理服务器的情况。
显然,为每个应用程序使用子域名可以很好地工作,将代码app<n>.example.com/所有内容反向代理到您的内部app<n>.com/
通常情况下,反向代理不会重写从请求被转发到的服务器接收到的响应主体的内容,但是apache会允许你这样做:
<Location /app1/> ProxyPass http://app1.com/ ProxyPassReverse http://app1.com/ # rewrite the reponse body AddOutputFilterByType SUBSTITUTE text/html Substitute "s|/images/|/app1/images/|i" </Location>
您可以使用nginx作为 example.com域的反向代理 。
因此,在example.com的nginx网站的conf文件中,您可以设置一个重写语句来完成您正在寻找的内容。
您可以阅读本指南: http : //www.cyberciti.biz/tips/using-nginx-as-reverse-proxy.html&https : //www.digitalocean.com/community/articles/how-to-configure- nginx的作为一种-前端代理换apache的
希望这对你有用。
🙂