Итак, у меня есть этот сайт, который используется Apache 2 в качестве виртуального хоста. И у него есть метрическая тонна альтернативных доменных имен, которые все должны разрешать его.
До сих пор я справлялся с подобными вещами, добавляя дополнительные домены в список ServerAlias в файле конфигурации vhost. Но по мере того, как количество доменов с псевдонимами увеличивалось, этот список стал очень длинным и громоздким. Это также требует отдельного добавления как голого домена, так и версии «www», что (поскольку я должен не забывать добавить и то и другое) оставляет мне место быть идиотом и забыть добавить тот или иной. Этого еще не произошло, но когда список достаточно длинный, подобные упущения не бросаются в глаза, как это происходит, когда там всего пара доменов, поэтому я беспокоюсь, что когда-нибудь это неизбежно.
Похоже, что должен быть способ выбросить список псевдонимов из файла конфигурации vhost в какое-то другое место, где ими можно было бы легче управлять. Даже текстовый файл с каждым псевдонимом на отдельной строке был бы улучшением, поскольку, по крайней мере, тогда было бы легче визуально сканировать список, чем с длинной строкой, разделенной запятыми. И похоже, что должен быть способ, чтобы субдомен «www» также автоматически обрабатывался для виртуального хоста, вместо того, чтобы вручную добавлять псевдоним «www» для каждого домена. Но я искал такие вещи и пока не нашел очевидных решений.
Это, вероятно, просто я не ищу в нужном месте, но на всякий случай - есть ли более элегантный способ обработки ServerAliases для vhost? И если да, то что это?
Вы можете включить произвольные параметры конфигурации из внешнего файла, используя Include
вместо фактического параметра, который вы хотите извлечь из файла. (есть также опция mod_perl, если вы являетесь мастером Perl старой школы ;-)
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, которое захотите, чтобы настроить список псевдонимов при запуске ;-)
3. возможно другие (более простые ;-) способы ...
Что, если вы настроите свой универсальный сайт в основном контексте, за пределами объем? Тогда тебе понадобится ServerAlias только для доменов, которые должны быть отдельными виртуальными сайтами.
Вы можете повторить строку ServerAlias в файле конфигурации vhost несколько раз. Думаю, ближе к тупому text.file не попадешь. Однако не забудьте добавить www ...
Как насчет того, чтобы написать программу, которая заполняла бы эти строки за вас? В аналогичном приложении у меня есть VHost для каждого имени и около 50 имен, о которых нужно заботиться, и у меня Puppet генерирует их. Затем я просто перечисляю:
mySite::newSite{ 'example.com': }
И он генерирует два VHosts (один для порта 80, один для порта 443) с example.com
и www.example.com
. Это означает, что файл будет заполнен mySite::newSite
строк, но это менее плохо :)
Вам не обязательно использовать Puppet, в этом может помочь любой язык. Файлы Ruby erb - это вариант.