У меня есть пара поддоменов с одинаковым поведением (на основе имени поддоменов), и я пытаюсь найти лучшее решение с меньшими издержками для сервера nginx.В этом домене также есть домены по умолчанию www и non-www, а также подстановочный знак (эти «пара» поддоменов не должны совпадать с подстановочным знаком).
На данный момент я нашел 3 возможных решения:
определить каждый поддомен в отдельном блоке сервера и жестко закодировать поддомен
server {
server_name one.domain;
# config with "one"
}
server {
server_name two.domain;
# same config with "two"
}
... three, four etc.
это должно быть в порядке, но это не СУХОЙ (не повторятьсебя) тоже долго и выглядит некрасиво
перехватывать имя_сервера в регулярном выражении
server {
server_name ~^(?<subdomain>one|two|three|...)\.domain\.com$;
# config with $subdomain
}
конфигурация чище, но есть издержки регулярного выражения, также может взаимодействовать с виртуальным хостом с подстановочными знаками, я неуверен, что будет иметь приоритет
статическое имя хоста плюс карта
server {
server_name one.domain two.domain three.domain ....;
# config with $subdomain, where $subdomain is a map based on $server_name, extracting all characters before .
}
это должен быть лучший подход, выбор vhost основан на сравнении строк (без регулярного выражения), но я все еще использую регулярное выражениев этой «карте»
Вопрос в том, можно ли улучшить третье решение?
Как при извлечении части строки (т. е. $ subdomain из $ server_name) без использования регулярного выражения?
Все субдомены находятся на одном уровне, и все заканчиваются на .domain