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

Общий поддомен для нескольких виртуальных доменов в Apache2

Я использую веб-сервер с Apache2 и несколькими виртуальными доменами. Кроме того, для этих доменов есть почтовый сервер с веб-интерфейсом. Для каждого виртуального домена example.com, У меня есть поддомен mail.example.com указывая на мой интерфейс веб-почты (Roundcube). Он отлично работает со следующей конфигурацией:

<VirtualHost *:80>
    ServerAdmin me@example.com
    ServerName mail.example.com
    ServerAlias mail.vname1.com, mail.vname2.com, mail.vname3.com, #...

    DocumentRoot /srv/www/mail/
    <Directory />
            Options FollowSymLinks
            AllowOverride None
    </Directory>
    <Directory /srv/www/mail>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
    </Directory>

    ErrorLog /var/log/apache2/mail.error.log
    LogLevel warn

    CustomLog /var/log/apache2/mail.access.log combined
</VirtualHost>

Однако для каждого нового клиента я должен, среди прочего, добавить соответствующее доменное имя в список ServerAliases.

Есть ли способ автоматически связать все mail.* поддомены с /srv/www/mail/?

Директива ServerAlias ​​поддерживает подстановочные знаки - вы должны иметь возможность использовать следующее, чтобы сопоставить все «почтовые» поддомены.

ServerAlias mail.*

Поддомен с подстановочными знаками (например, * .domain.tld) ​​хорошо документирован, но трудно найти какие-либо указания на то, что часть домена также может быть подстановочным знаком.

Я довольно часто использовал этот подход для общих поддоменов, когда использовал Apache. Единственная разница в том, что я использовал перенаправление на общий URL (потому что я хотел использовать SSL и не хотел получать сертификат для каждого домена). Тем не менее, он смог успешно захватить поддомен, поэтому такая же реализация должна работать в вашем сценарии. (Конечно, вам все еще нужна статическая директива ServerName).