如何将子域名的主机名反向代理到不同的域名?

如何将子域名的主机名反向代理到不同的域名?

我想将子域名反向代理到具有相同主机名的另一个域名。

例子:

fitzefatze.sourcedomain.com 应获取以下内容:

fitzefatze.targetdomain.com

这应该是动态的,以便每个主机名都将被转换为目标域名。

我猜这可以通过 ProxyPass 指令来完成,但我不知道如何获取目标的主机名:

类似于 ServerName *.sourcedomain.com

ProxyRequests Off
<Proxy *>
    AddDefaultCharset off
    Order deny,allow
    Allow from all #
</Proxy>

ProxyPass / $1.targetserver.com

答案1

有 ProxyPassMatch 指令,但它确实指定了以下限制:

URL 参数在正则表达式替换之前(以及之后)必须可解析为 URL。这限制了您可以使用的匹配项。例如,如果我们使用了

代理密码匹配 ^(/.*.gif)$http://backend.example.com:80001 美元

在我们之前的例子中,它会在服务器启动时因语法错误而失败。这是一个错误(ASF bugzilla 中的 PR 46665),解决方法是重新制定匹配:

ProxyPassMatch ^/(.*.gif)$http://backend.example.com:8000/1 美元

我不知道在替换之前它是否会接受 http://$1.targetserver.com 作为有效的 URL——尝试一下并告诉我们!

正如 Shane 所说,您也可以使用 mod_rewrite,但您应该知道 mod_rewrite 完成的代理不使用连接池——每个新请求都会动态创建一个新的代理连接。因此,您将无法从 ProxyPass 完成的持久连接池中受益,也无法使用 ProxyPass 提供的每个连接池选项(keepalive、timeout、connectiontimeout、retry、min/max 等)微调其行为。

请注意,对于这两种替代方案,似乎都没有匹配的 ProxyPassReverseMatch 指令。

答案2

为此,您需要使用mod_rewrite..

RewriteCond %{HTTP_HOST} ^(.*)\.sourcedomain\.com$
RewriteRule ^/(.*)$ http://%1.targetdomain.com/$1 [P,L]

..请记住,ProxyPassReverse在这里不起作用所以任何30x回应都不会被翻译。

相关内容