通过动态主机名使用 Apache ProxyPass

通过动态主机名使用 Apache ProxyPass

我正在尝试将 Apache 配置为基于动态主机名并使用其他端口代理到内部服务器。这对我来说似乎有点太复杂了。这就是我所拥有的:

<Location /awesomewebapp>
ProxyPass http://[internalservername]:8080/awesomewebapp
ProxyPassReverse http://[internalservername]:8080/awesomewebapp
</Location>

但这(显然)不是动态的。我一直在研究重写规则等,但没能让它发挥作用。我真正需要的是:

^/[internalservername]/awesomewebapp
      proxy internally to
http://[internalservername]:8080/awesomewebapp

提前致谢

答案1

您可以使用 RewriteRule 来代理请求。关于使用 mod_rewrite 作为代理的 apache 文档显示以下内容:

描述:

mod_rewrite 提供 [P] 标志,允许通过 mod_proxy 将 URL 传递到另一台服务器。这里给出了两个示例。在一个示例中,URL 直接传递到另一台服务器,并像本地 URL 一样提供服务。在另一个示例中,我们将缺失的内容代理到后端服务器。

解决方案:

为了简单地将 URL 映射到另一台服务器,我们使用 [P] 标志,如下所示:

RewriteEngine 在 RewriteBase "/products/" RewriteRule "^widget/(.*)$" 上http://product.example.com/widget/$1” [P] ProxyPassReverse “/products/widget/” “http://product.example.com/widget/

在第二个示例中,我们仅当无法在本地找到资源时才代理请求。当您从一台服务器迁移到另一台服务器并且不确定是否已迁移所有内容时,这非常有用。

RewriteCond "%{REQUEST_FILENAME}" !-f RewriteCond "%{REQUEST_FILENAME}" !-d RewriteRule "^/(.*)" "http://old.example.com/$1“[P] ProxyPassReverse“/””http://old.example.com/

第二个示例,有条件地使用 [P] 标志重写 URL 来代理请求似乎正是您所需要的。

答案2

我之前的“解决方案”仍然无法正常工作,因此我将其删除以避免混淆。它似乎无法按照我想要的方式实现,但使用子域而不是子目录的小解决方法仍然可以让它发挥作用。

RewriteCond %{HTTP_HOST} ([^.]+)
RewriteRule ^/(.*) http://%1:8080/$1 [P]

来源:http://www.vanbommelonline.nl/2011/10/using-apache-for-dynamic-reverse-proxy.html

相关内容