【问题标题】:Apache Proxy pass and static resourcesApache Proxy pass 和静态资源
【发布时间】:2015-12-26 19:52:06
【问题描述】:

我有两个应用程序在我的本地主机上运行,​​并像这样配置 proxypass

ProxyPass /app1 http://192.168.56.102:10001/
ProxyPass / http://192.168.56.102:82/

现在当我点击 url http://192.168.56.102/app1 时,我有了 app1 的内容 如果我使用 http://192.168.56.102 我有我的第二个应用程序的内容

app1 索引 html 包含 <link href="/style.css" rel="stylesheet"> 并且它不能正常工作,因为它没有将 http://192.168.56.102/app1 作为基本 url,而是使用 http://192.168.56.102/ 并且我的资源无法在 http://192.168.56.102/style.css 加载,因为它没有重定向到正确的应用程序 url 并且不包含 style.css 。

在 app2 上它运行良好,因为根 url 是 http://192.168.56.102 考虑到我的代理规则。

那么有没有办法实现我想要的?

代理到 app1 时,使用静态内容的 url http://192.168.56.102/app1 如果我使用 <link href="style.css" rel="stylesheet"> 它可以工作,但它不是我的应用程序,并且每个静态资源都以 / 为前缀

【问题讨论】:

    标签: apache proxy


    【解决方案1】:

    如果您的内容不喜欢从 / 以外的任何地方提供服务,则它不是代理友好的。您可以使用 mod_rewrite 检查 HTTP_REFERER 并在代理规则之前添加 /app1 前缀。

    【讨论】:

    • 我是一个新的 apache 你有一个教程来解释如何实现我想要的,因为当我在 myserver.com/app1 加载静态内容时,我需要说使用 /style.css 我需要添加 /app1 前缀,但我怎么知道。我不知道这怎么可能以及在什么条件下,因为我无法在地址 myserver.com/style.css 上拥有一个存在且用于第二个应用程序的文件。
    • 抱歉,没有教程可分享。您必须了解 http 大多是无状态的。您有时可以看到引用者或 cookie 来指示上下文。
    • 为了澄清我需要的是这样一个事实,即我有一个可以通过我购买的域名访问的服务器我只有一个域名让我们说:main.me 和我的主应用程序,它是一个节点 js应用程序可在 main.me 访问,我有其他服务,如 jenkins gitlab,并希望能够使用 main.me/jenkins 或 main.me/gitlab 访问服务,问题是这些服务位于 docker 容器中,并且在端口 8080 或 8084 上侦听,当我代理到 gitlab 主机时,例如 css 之类的资源是使用 / 编码的,要查找资源,它查看 main.me/style.css
    • 我决定使用 jenkins.main.me 而不是 main.me/jenkins 更改 url 样式,它解决了我的问题。
    【解决方案2】:

    你必须在 tomcat 的 webapps 文件夹中为每个项目创建 2 个文件夹。 tomcat/webapps/ 通常你必须是一个文件夹,但如果你想使用两个项目,你必须配置 server.xml 来使用这两个。 tomcat/conf/server.xml

    【讨论】:

    • 实际上我没有使用 tomcat 我在 var/www 文件夹中使用一个 nodejs 应用程序和一个静态站点。节点 js 应用程序可在 192.168.56.102 访问,另一个应用程序在 192.168.56.102/app1 我希望我的主应用程序可以直接使用 serverName 访问,其他应用程序可以通过键入 serverName/app1 ...
    猜你喜欢
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 2015-01-29
    • 2014-07-29
    • 1970-01-01
    • 2023-04-01
    • 2013-05-23
    • 2022-12-04
    相关资源
    最近更新 更多