三个网站均在根上下文中进行反向代理

三个网站均在根上下文中进行反向代理

我们正在努力解决以下问题,并试图了解解决这个问题的最佳方法。总体目标是这样的:

--> 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

希望这对你有用。

:)

相关内容