Mod_Rewrite Apache ProxyPass?

Mod_Rewrite Apache ProxyPass?

我有两个网站:OLDSITE 和 NEWSITE。OLDSITE 有 120 个 IP 地址,NEWSITE 有 5 个。我希望能够将 OLDSITE 和 NEWSITE 中的所有内容分开,这样它们就不会绑定在一起,而是在同一台 Linux 计算机上使用它们。我当前的 Apache 设置如下:

Listen 80
NameVirtualHost *



<VirtualHost *>
        ServerName oldsite.com
        ServerAdmin [email protected]
        DocumentRoot /var/www/
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>


        RewriteEngine   on
        RewriteCond     %{HTTP_HOST}                       ^([^.]+)\.oldsite\.com$
        RewriteCond     /home/%1/                          -d
        RewriteRule     ^(.+)                              %{HTTP_HOST}$1
        RewriteRule     ^([^.]+)\.oldsite\.com/media/(.*)  /home/$1/dir/media/$2
        RewriteRule     ^([^.]+)\.oldsite\.com/(.*)        /home/$1/www/$2
</VirtualHost>


<VirtualHost newsite.com>
        ServerName newsite.com
        ServerAdmin [email protected]
        DocumentRoot /var/newsite/
        <Directory /var/newsite/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>


        RewriteEngine   on
        RewriteCond     %{HTTP_HOST}                        ^([^.]+)\.newsite\.com$
        RewriteCond     /home/%1/                           -d
        RewriteRule     ^(.+)                               %{HTTP_HOST}$1
        RewriteRule     ^([^.]+)\.newsite\.com/media/(.*)   /home/$1/dir/media/$2
        RewriteRule     ^([^.]+)\.newsite\.com/(.*)         /home/$1/www/$2

</VirtualHost>


<VirtualHost *>
        ServerName panel.oldsite.com
        ProxyPass / http://panel.oldsite.com:10000/
        ProxyPassReverse / http://panel.oldsite.com:10000/

        <Proxy *>
          allow from all
        </Proxy>

</VirtualHost>


<VirtualHost *>
        ServerName panel.newsite.com
        ProxyPass / http://panel.newsite.com:10000/
        ProxyPassReverse / http://panel.newsite.com:10000/

        <Proxy *>
            allow from all
        </Proxy>
</VirtualHost>

我希望能够访问 newsite.com 的任何内容,并让其转到 /var/newsite,除非它们是主目录...然后,如果是 panel.newsite.com,我希望它自动执行代理传递到 panel.newsite.com:10000... 使用此设置,它完美适用于 oldsite.com.... 代理和网页... 但是,将 Virtualhost 设置为 newsite.com 会使代理传递失效。如果我将 newsite.com 的 Virtualhost 更改为通配符,代理传递将起作用,但 newsite.com 的任何子域都将不起作用。因此 newsite.com 可以工作,但 www.newsite.com 将无法正确加载。

我假设当所有内容都使用通配符时,ServerName 的作用有点像 RewriteCond,实际上只是将内容应用于该 URL。它使用 Virtualhost * (oldsite.com) 并允许 ANYTHING.oldsite.com 工作,但第二个 virtualhost * (newsite.com) 只有 newsite.com 可以工作……www.newsite.com 则不行。如果我更改它们的顺序,则情况正好相反。所以显然它不喜欢我使用 2 个通配符……

我尝试将 Servername 设为 *.newsite.com ......但这太简单了。我不确定我能做什么来做我想做的事?也许我应该将 ProxyPass 包含在 VirtualHosts 中并使用类似以下内容:

RewriteCond     %{HTTP_HOST}            ^panel\.newsite\.com$   [NC]
RewriteRule     ^(.*)$                  http://panel.newsite.com:10000/ [P] 
ProxyPassReverse /                      http://panel.newsite.com:10000/

但它似乎不想登录到 webmin,它会加载登录页面,但无法像 ProxyPass 和 ProxyPassReverse 那样工作。

答案1

如果 Apache 找不到具有匹配的 ServerName 或 ServerAlias 的 VirtualHost,它将使用配置文件中找到的第一个 VirtualHost 作为默认值。使用上述配置,我认为例如“www.newsite.com”最终将由 oldsite.com VirtualHost 处理。

您是否尝试过向两个主要 VirtualHosts 分别添加 ServerAlias 行 - 即

<VirtualHost *>
    ServerName oldsite.com
    ServerAlias *.oldsite.com
    ...
</VirtualHost>
<VirtualHost *>
    ServerName newsite.com
    ServerAlias *.newsite.com
    ...
</VirtualHost>

相关内容