#nginx #nginx-reverse-proxy #consul #consul-template
#nginx #nginx-обратный прокси #консул #консул-шаблон
Вопрос:
Я только что унаследовал настройку прокси-сервера / сервера приложений Nginx, которая использует шаблон Consul и Consul для обнаружения и регистрации служб. Прокси-сервер Nginx имеет конфигурационный файл с подобной записью для регистрации нижестоящих серверов приложений:
<snip>
upstream appservers {
{{ range service "my-app-servers" }}
server {{ .Address }}.{{ .Port }};
{{ end }}
}
<snip>
Я consul-template
работаю в фоновом режиме, чтобы отслеживать любые обновления my-app-servers
, nginx.conf
соответствующим образом обновлять файл, а затем перезагружать конфигурацию nginx. Все это отлично работает, и мы можем добавлять и удалять серверы приложений из набора по мере необходимости. Тем не менее, если существует сценарий, в котором у нас нет доступных серверов приложений, мы получаем пустой upstream
блок, и это приводит к сбою перезагрузки nginx.
Есть ли способ в consul-template иметь "if service my-app-servers exists, then..."
"if not, then..."
логику и? Я хотел бы иметь возможность иметь в моем nginx.conf
файле одну конфигурацию для сценариев, в которых существуют вышестоящие серверы, и другую настройку на случай непредвиденных обстоятельств, которая отображает страницы ошибок, когда вышестоящие серверы не существуют. Я все еще набираю скорость в consul-template и не видел примеров, показывающих синтаксис для такой логики. Любая помощь?
Ответ №1:
Вы можете добиться этого, сохранив результат service
поиска в переменной, а затем используя условие, которое выводит блок восходящего потока только в том случае, если переменная не пуста.
{{- $upstream_services := service "my-app-servers" -}}
{{- if $upstream_services -}}
upstream appservers {
{{- range $upstream_services }}
server {{ .Address }}.{{ .Port }};
{{- end }}
}
{{- end }}