Управление множеством 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 файлы являются опцией.