У меня два сайта; СТАРЫЙ САЙТ и НОВОСТИ. 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>