Могут ли Apache vhost_alias и NameVirtualHost сосуществовать на одном сервере / ip?
У меня есть сервер разработки для программистов PHP, настроенный и работающий уже некоторое время. Система Debian со стандартным пакетом Apache:
# apache2 -v
Server version: Apache/2.2.9 (Debian)
Server built: Dec 11 2010 18:58:55
Я создал около 30 виртуальных хостов на основе имен, по одному для каждого проекта и для каждого разработчика. Я делаю настройку со скриптами, но теперь мне нужно добавить около 15 новых проектов, каждый из которых со стандартной структурой каталогов, поэтому я подумал, что буду использовать mod_vhost_alias
У меня мой конфиг похож на это:
NameVirtualHost *:80
#Default vhost
<VirtualHost *:80>
DocumentRoot /var/www/404
ServerName dev.example.com
ErrorLog /var/log/apache2/404.error_log
TransferLog /var/log/apache2/404.access_log
<Directory "/var/www/404">
allow from all
Options Indexes Includes
AllowOverride All
</Directory>
</VirtualHost>
#this entry is repeated many times
#with different server names, document roots
# and other differences, bu basics stay the same
<VirtualHost *:80>
DocumentRoot /var/www/crm
ServerName crm.dev.example.com
ErrorLog /var/log/apache2/crm.error_log
TransferLog /var/log/apache2/crm.access_log
<Directory "/var/www/crm">
allow from all
Options Indexes Includes
AllowOverride All
</Directory>
</VirtualHost>
# I added Vhost_alias virtaul host today, at the end of the config
<VirtualHost *:80>
# This is for pages similar to some-page.pl.web.example.com
UseCanonicalName Off
ServerAlias *.web.dev.example.com
VirtualDocumentRoot /var/www/web/%-4+/cur
ErrorLog /var/log/apache2/%-4+.error_log
TransferLog /var/log/apache2/%-4+.access_log
<Directory /var/www/%-4+>
allow from all
Options Indexes Includes
AllowOverride All
</Directory>
</VirtualHost>
В результате, когда я подключаюсь к http://my-page.com.web.dev.example.com/ я получаю vhost по умолчанию из каталога /var/www/404. Каталог /var/www/web/my-page.com/ существует и содержит копию реальной веб-страницы my-page.com.
Что я делаю неправильно? Нужны ли отдельные IP-адреса для "стандартного" NameVirtualHost и для vhost_alias? Что еще я должен проверить?
2 ответа
Да, вы можете использовать NameVirtualHost
а также mod_vhost_alias
в той же конфигурации. Измени свой mod_vhost_alias
запись, как это:
<IfModule mod_vhost_alias.c>
<VirtualHost *:80>
ServerAlias *.web.dev.example.com
VirtualDocumentRoot /var/www/web/%-4+/cur
ErrorLog /var/log/apache2/%-4+.error_log
TransferLog /var/log/apache2/%-4+.access_log
<Directory /var/www/%-4+>
allow from all
Options Indexes Includes
AllowOverride All
</Directory>
</VirtualHost>
</IfModule>
Поместите эту запись прямо под линией Include conf.d/*.conf
в httpd.conf
(найдено на /etc/httpd/conf/httpd.conf
в системах RHEL) или в новом файле в /etc/apache2/conf-enabled/
для Ubuntu.
редактировать: я в блоге дополнительную информацию.
Ранее я настроил аналогичный VirtualDocumentRoot для субдоменов подстановочных знаков. Просто так полезно иметь возможность создавать каталог внутри чьего-либо домашнего каталога - обычно делиться своим каталогом через Samba, чтобы их можно было использовать с рабочего стола разработчика - и вы создали новый веб-сайт - по крайней мере, для разработки и тестирования.
Что касается вашей проблемы, я просто поместил их на разные IP-адреса, без vhost по умолчанию.