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

Могут ли 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 Я получаю виртуальный хост по умолчанию из каталога / var / www / 404. Каталог /var/www/web/my-page.com/ существует и содержит копию настоящей веб-страницы my-page.com.

Что я делаю не так? Нужны ли мне отдельные IP-адреса для "стандартного" NameVirtualHost и для vhost_alias? Что еще я должен проверить?

Да, вы можете использовать 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-адреса без виртуального хоста по умолчанию.