Управление множеством Apache vhost ServerAliases

Итак, у меня есть этот сайт, который Apache 2 обслуживает как виртуальный хост, и на нем есть метрическая тонна альтернативных доменных имен, которые все должны разрешаться.

До сих пор я занимался такими вещами, добавляя дополнительные домены в список ServerAlias ​​в файле конфигурации vhost. Но поскольку количество доменов с псевдонимами увеличилось, этот список стал чрезвычайно длинным и громоздким. Это также требует добавления как голого домена, так и версии 'www' по отдельности, что (поскольку я должен не забыть добавить оба) оставляет мне место для того, чтобы быть идиотом и забыть добавить один или другой. Еще не произошло, но когда список достаточно длинный, подобные упущения не выпрыгивают из вас, как это происходит, когда там всего пара доменов, поэтому я волнуюсь, что когда-нибудь это неизбежно.

Похоже, должен быть способ выкинуть список псевдонимов из файла конфигурации vhost в другое место, где ими можно было бы легче управлять. Даже текстовый файл с каждым псевдонимом в отдельной строке был бы улучшением, поскольку, по крайней мере, тогда было бы проще визуально просмотреть список, чем с длинной строкой, разделенной запятой. И, похоже, должен быть способ, чтобы поддомен 'www' автоматически обрабатывался и для vhost, вместо того, чтобы вручную добавлять псевдоним 'www' для каждого домена. Но я искал такие вещи и пока не нашел очевидных решений.

Возможно, я просто не смотрю в нужном месте, но на всякий случай - есть ли более элегантный способ обработки ServerAliases для vhost? И если так, что это?

4 ответа

Решение

Вы можете включить произвольные параметры конфигурации из внешнего файла, используя Include директива вместо фактической опции, которую вы хотите извлечь из файла. (есть также опция mod_perl, если вы старый Perl-мастер по skool;-)

1. использовать Include директива, чтобы включить список ServerAlias из текстового файла в conf.d/mydomain.conf вот так;

<VirtualHost *:80>
    ServerName www.mydomainname.com 
    # instead of ServerAlias, include a file containing those directives
    Include /etc/httpd/conf/MyDomainServerAlias.list
...
</VirtualHost>

Затем создайте список с ServerAlias Директива с префиксом, как так в
/etc/httpd/conf/MyDomainServerAlias.list;

ServerAlias mysqdomain.com www2.mysqdomain.com www.mysqdomain.com www.mysqdomain.com www.mysqdomain.com www.mysqdTTTomain.com www.mCCysqdomain.com www.mysqdomain.com

или по одному на строку, так как это может быть более удобным для проверки и написания сценариев;

ServerAlias mysqdomain.com 
ServerAlias www.mysqdomain2.com 
ServerAlias mysqdomain2.com 
ServerAlias www.mysqdomain.com

2. вы можете динамически настроить Apache, используя <Perl> блоки с помощью mod_perl

 <Perl>
  $ServerName = `hostname`;
  $ServerAlias = 'somethingelse.com';
  </Perl>

Следовательно, вы можете использовать любой Perl wizardry для настройки списка псевдонимов при запуске;-)

3. возможно, другие (более простые;-) способы...

Вы можете повторить строку ServerAlias ​​в вашем конфигурационном файле vhost несколько раз. Я думаю, что ближе к тупому тексту. Файл вы не получите. Тем не менее, вы должны помнить, чтобы добавить WWW...

Что делать, если вы настраиваете свой "универсальный" сайт в главном контексте, кроме объем? Тогда вам понадобится ServerAlias только для доменов, которые должны быть отдельными виртуальными сайтами.

Как насчет написания программы для заполнения этих строк для вас? В аналогичном приложении у меня есть VHost на имя и около 50 имен, и Puppet генерирует их. Я тогда просто перечислю:

mySite::newSite{ 'example.com': }

И он генерирует два VHosts (один для порта 80, один для порта 443) с example.com а также www.example.com, Это означает, что файл, полный этих mySite::newSite линии, но это не так плохо:)

Вам не нужно использовать Puppet, любой язык может помочь с этим. Ruby erb файлы являются опцией.

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