Nginx не запустится с хоста, не найденного в апстриме

26
задан rinu 18 May 2018 в 12:44
поделиться

1 ответ

Более ранние версии nginx (до 1.1.4), которая уже использовала огромное количество самых посещаемых веб-сайтов по всему миру (а некоторые до сих пор работают даже в наши дни, если верить заголовкам серверов), даже не поддерживали keepalive на стороне upstream , потому что это очень мало выгодно в настройке центра обработки данных, если только у вас нет нетривиальной задержки между вашими различными хостами; см. https://serverfault.com/a/883019/110020 для некоторых объяснений.

По сути, если вы не знаете, что вам конкретно нужен keepalive между вашими восходящим и внешним интерфейсом, есть вероятность, что это только сделает вашу архитектуру менее устойчивой и ухудшенной.

(Обратите внимание, что ваше текущее решение также неверно, потому что изменение IP-адреса также останется незамеченным, потому что вы выполняете разрешение имени хоста только при перезагрузке конфигурации; поэтому, даже если nginx запустится, он в основном перестанет работать как только IP-адреса вышестоящих серверов меняются.)

Потенциальные решения, выберите один:

  • Лучшее решение, похоже, просто избавиться от upstream keepalive как вероятно ненужный в среде центра обработки данных, и используйте переменные с proxy_pass для актуального разрешения DNS для каждого запроса (nginx все еще достаточно умен, чтобы выполнять кэширование таких разрешений)

  • Другой вариант - получить платную версию nginx через коммерческую подписку, которая имеет параметр resolve для директивы server в пределах upstream контекст.

  • Наконец, еще одна вещь, которую можно попробовать, это использовать переменную set и / или map для указания серверов в upstream; это ни подтверждено, ни опровергнуто не было выполнено; например, это может или не может работать.

5
ответ дан cnst 18 May 2018 в 12:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: