Назад | Перейти на главную страницу

Mod_Rewrite Apache ProxyPass?

У меня два сайта; СТАРЫЙ САЙТ и НОВОСТИ. OLDSITE имеет 120 IP-адресов, а NEWSITE - 5. Я хочу иметь возможность отделить все от OLDSITE и NEWSITE, чтобы они не были связаны друг с другом, а использовали их на одном компьютере Linux. Моя текущая настройка apache такова:

Listen 80
NameVirtualHost *



<VirtualHost *>
        ServerName oldsite.com
        ServerAdmin webmaster@oldsite.com
        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 webmaster@newsite.com
        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 делает proxypass бесполезным. Если я изменю виртуальный хост для newsite.com на подстановочный знак, proxypass будет работать, но все, что является поддоменом newsite.com, работать не будет. поэтому newsite.com будет работать, но www.newsite.com не загрузится правильно.

Я предполагаю, что когда все обозначено подстановочными знаками, тогда ServerName действует как RewriteCond и фактически просто применяет материал к этому URL-адресу. Он использует Virtualhost * (oldsite.com) и позволяет работать ANYTHING.oldsite.com, но второй виртуальный хост * (newsite.com) только newsite.com будет работать ... www.newsite.com не будет. Если я изменю их порядок, все будет наоборот. Так что, по-видимому, мне не нравится, что я использую 2 подстановочных знака ...

Я пробовал просто сделать имя сервера * .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.

Если Apache не может найти VirtualHost с соответствующим ServerName или ServerAlias, по умолчанию он использует первый VirtualHost, найденный в файле конфигурации. Я думаю, что с приведенной выше конфигурацией, например, "www.newsite.com" будет обрабатываться VirtualHost oldsite.com.

Вы пробовали добавить строку ServerAlias ​​к каждому из двух основных VirtualHosts, т.е.

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