使用 Apache 2 的动态反向代理

使用 Apache 2 的动态反向代理

希望您能帮助我解决这个问题,我有一个配置为某些域的反向代理的 apache 服务器。它们指向 iis 服务器,并且在同一台机器上还有一些 php 站点作为虚拟主机。

对于反向代理我这样做:

<VirtualHost *:80>
    ServerName reverseprox1
    ServerAlias site1.domain.com
    ProxyRequests Off
    ProxyPass / http://site1.domain.com/
    ProxyPassReverse / http://site1.iisserver.internald.com/
    ProxyPassReverseCookieDomain site1.iisserver.internald.com site1.domain.com
</VirtualHost>
<VirtualHost *:80>
    ServerName reverseprox2
    ServerAlias site2.domain.com
    ProxyRequests Off
    ProxyPass / http://site2.domain.com/
    ProxyPassReverse / http://site2.iisserver.internald.com/
    ProxyPassReverseCookieDomain site2.iisserver.internald.com site2.domain.com
</VirtualHost>
...

运行良好,但现在我需要添加大约 20 个指向 iis 服务器的测试站点(使用随机名称,而不仅仅是 site1、site2、site3 等)。有没有办法让它动态化?IE 它会检测 site2.domain.com 的 site2 并将其指向 site2.iisserver.internald.com。

我不能用鱿鱼。

这是我的尝试,但到目前为止失败了

<VirtualHost *:80>
    ServerName default
    ServerAlias  domain.com
    ProxyRequests Off
    RewriteEngine on
    RewriteCond %{HTTP_HOST} (.+)\.domain\.com
    ProxyPass / http://%1.domain.com/
    ProxyPassReverse / http://%1.iisserver.internald.com/
    ProxyPassReverseCookieDomain %1.iisserver.internald.com %1.domain.com
</VirtualHost>

非常感谢您的帮助

答案1

以下两行代码有什么问题:

1-21 案例。

#!/bin/bash

while [[  $(( $i < 21 )) != 0 ]]; do
  cat << EOF
  <VirtualHost *:80>
    ServerName reverseprox$i
    ServerAlias site$i.domain.com
    ProxyRequests Off
    ProxyPass / http://site$i.domain.com/
    ProxyPassReverse / http://site$i.iisserver.internald.com/
    ProxyPassReverseCookieDomain site$i.iisserver.internald.com site$i.domain.com
  </VirtualHost>
EOF
  i=$(( $i + 1 ))
done

任何事情 - 情况。

它会打印您需要添加到 conf 文件的所有记录。

#!/bin/bash
#Read a file, or query a db somewhere.
for i in  $(cat /path/to/namelist); do
  cat << EOF
  <VirtualHost *:80>
    ServerName reverseprox$i
    ServerAlias $i.domain.com
    ProxyRequests Off
    ProxyPass / http://$i.domain.com/
    ProxyPassReverse / http://$i.iisserver.internald.com/
    ProxyPassReverseCookieDomain $i.iisserver.internald.com $i.domain.com
  </VirtualHost>
EOF
done

答案2

我非常确定您可以为此使用重写规则。

http://httpd.apache.org/docs/current/rewrite/flags.html#flag_p有关如何设置重写规则以使用 mod_proxy 的描述。

相关内容