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

Приоритет конфигурации Apache VHost?

Итак, у меня есть 2 файла конфигурации.

mysite.conf

<VirtualHost *:80>
        ServerName      www.mysite.com
        ServerAlias     mysite.com *.mysite.com
        DocumentRoot    /var/www/mysite/www
        ErrorDocument 404 /redirect.php
    ErrorLog    logs/application/mysite.error_log
    CustomLog   logs/application/mysite.access_log Combined
</VirtualHost>

videoupload.conf

<VirtualHost *:80>
        ServerName      upload.mysite.com
        DocumentRoot    /var/www/videouploader/www
    ErrorLog logs/application/videoupload.error_log
    CustomLog logs/application/videoupload.access_log Combined
</VirtualHost>

Видите ли, у нас есть около 50 возможных поддоменов something.mysite.com, которые выполняют разные функции, но все они обслуживаются из одного корня документа.

Я хотел бы сохранить * .mysite.com там просто потому, что он чище, чем имеет самую длинную в мире линию серверов, плюс он защищает от задержек при попытке использовать bananananan.mysite.com или что-то, что не сработает.

Я прочитал документацию по apache, и на самом деле ничего не было для этого сенарио. Кто-нибудь знает, как это сделать?

Apache ищет совпадения vhost сверху вниз и выполняет первое обнаруженное совпадение. Если вы переименовали videoupload.conf к 0videoupload.conf это будет прочитано раньше mysite.conf и это должно просто работать.

У меня была аналогичная проблема. Решением было удалить доменное имя из заголовков любых других <VirtualHost> директива. Удалять:

<VirtualHost test.blah.org:443>
ServerName test.blah.org

Заменить:

<VirtualHost *:443>
ServerName test.blah.org

Использование доменного имени в заголовке привело к тому, что apache соответствовал этому виртуальному хосту, а не моему ServerAlias static-*.blah.org под <VirtualHost *:443> директива.