Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС для молодых и начинающих системных администраторов.
IP адресов у domain.service.consul несколько и они переодически меняются. Выдаются они consul-ом и чез него же резолвятся (он выступает днс-сервером). Проблема в том, что если !Р адреса у domain.service.consul поменялись, nginx не видит их и как я понимаю, отправляет запросы по старым !Р. Если после изменения !Р адресов у domain.service.consul, перезагрузить nginx, то он видит новые !Р адреса и все работает. Я так понимаю, что во время своего запуска, nginx делает resolve !Р адресов всех доменов, которые у него прописаны для proxy_pass, кладет их себе в кеш и использует их пока не будет полностью перезагружен. При этом
Вопрос решен. По умолчанию, nginx кеширует резолв днс на 5 мин. Решений несколько:
1. менять ttl для домена на стороне днс-сервера.
2. Или изменить конфиг nginx:
а. В server пишем
Собственно, nginx (и кто угодно другой) имеет полное право кешировать адрес до истечения TTL. Так что это IMHO единственно верное решение (устранение причины, а не борьба с её последствиями).
valid=2s в конфиге nginx - тоже самое что и "менять ttl для домена на стороне днс-сервера.", только подход с другой стороны.
Нет, это не то же самое. Это именно борьба с последствиями (на стороне клиента) вместо устранения причины (на стороне сервера). Решите добавить дополнительные фронтенды — опять наступите на те же грабли. Понадобится обращаться к бекенду откуда-то ещё (не из nginx) — снова те же грабли.