我们正在努力解决以下问题,并试图了解解决这个问题的最佳方法。总体目标是这样的:
--> 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
我们考虑过以下解决方案,其中一些可行,而另一些则不行。我们正在尝试找出最好的方法,因为我们绝不是专家。到目前为止,我们一直使用的工具是 Nginx 来执行反向代理,但工具并不重要,我们对任何方法都持开放态度。
解决方案 1
Nginx 重写正文,为 app1 请求添加“app1”,等等。如上例所示,有一个对 app1 的请求,返回一个 index.html。该 index.html 又包含一些看起来像<img src="images/hello.png" />
文件的标签。这显然行不通,所以我们重写正文(即 index.html),内容如下<img src="app1/images/hello.png" />
。
解决方案 1 的问题
我们必须非常擅长制定主体重写规则,否则我们可能会重写一些我们不想写的东西,然后破坏一些 JS 或 HTML。此解决方案也不适用于某些 JS 代码(我们使用 Angular),这些代码不会隐式写出视图的位置,而是由框架本身组合在一起。
解决方案 2
将每个应用程序从根目录移动到其自己的文件夹。这意味着任何 img 或其他请求都将更新为<img src="app1/images/hello.png" />
。
解决方案 2 的问题
我们必须将所有现有的 3 个网站改为从各自的新根请求资源。
如能得到任何帮助我将非常感激,提前谢谢。
答案1
理想情况下,您可以重新部署您的应用程序,以便每个应用程序都安装在http://app<n>.com/app<n>
文档根目录中。
如果没有的话,也许您可以将链接设为相对链接,而不是链接到或/images/logo.png
取决于../images/logo.png
所提供的页面,这将在反向代理情况下正确转换。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>
答案2
您可以使用nginx 作为反向代理对于 example.com 域。
因此,在 nginx 站点(例如 example.com)的 conf 文件中,您可以设置重写语句来完成您要查找的内容。
您可以阅读本指南:http://www.cyberciti.biz/tips/using-nginx-as-reverse-proxy.html&https://www.digitalocean.com/community/articles/how-to-configure-nginx-as-a-front-end-proxy-for-apache
希望这对你有用。
:)