Виртуальный хост для переопределения поддоменов виртуального хоста по умолчанию

У меня есть два vhosts, настроенных в Apache. Один по умолчанию для обработки всех запросов и один для определенного субдомена. Каталог www настроен следующим образом:

/var/www
/var/www/subdomain

Конфиги виртуального хоста:

<VirtualHost *:80>
        DocumentRoot /var/www
        <Directory />
                Options None
                AllowOverride None
        </Directory>
        <Directory /var/www>
                Options None
                AllowOverride None
                Deny from all
        </Directory>
</VirtualHost>


<VirtualHost subdomain>
        ServerName subdomain.domain.com

        DocumentRoot /var/www/subdomain
        <Directory /var/www/subdomain>
                Options None  FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>
</VirtualHost>

Прямо сейчас я хочу что-нибудь subdomain.domain.com быть поданным из /var/www/subdomain и любой другой запрос будет отклонен. Однако, когда я захожу на domain.com, он служит /var/www/subdomain,

Спасибо, если кто-нибудь скажет мне, что я делаю не так. Спасибо!


РЕДАКТИРОВАТЬ с дополнительной информацией при запуске apache2ctl -S

/usr/sbin/apache2ctl: 87: ulimit: error setting limit (Operation not permitted)
apache2: Could not reliably determine the server's fully qualified domain name, using XX.XXX.XXX.XX for ServerName
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server domain (/etc/apache2/sites-enabled/default:1)
         port 80 namevhost domain (/etc/apache2/sites-enabled/default:1)
         port 80 namevhost sub.domain.com (/etc/apache2/sites-enabled/subdomain:1)
Syntax OK

1 ответ

Решение

Ваша проблема здесь:

<VirtualHost subdomain>

Не делайте этого, так как он дает приоритет vhost по сравнению с существующим для любого разрешенного IP-адреса. Так должно быть <VirtualHost *:80> соответствующий вашему существующему vhost. ServerName директива - это то место, куда должно идти имя vhost.

Вам также нужно NameVirtualHost *:80 где-нибудь, если у вас его еще нет.

Другие вопросы по тегам