Мне нравится запускать nginx как локальный прокси-сервер, обслуживающий устаревшие файлы кеша, если вышестоящий сервер недоступен.
Это работает хорошо, за исключением того, что локальный компьютер перезагружается при сбое подключения к Интернету. В этом случае nginx вообще не запускается, говоря: «хост не найден в восходящем потоке ....».
Мне нужен запуск nginx в каждом случае, иначе устаревший кеш не сможет обслуживаться при сбое восходящего соединения.
Итак, как заставить nginx игнорировать ошибку подключения один раз при запуске?
Вы можете настроить upstream
сервер с backup
вариант, то обычно не попадает.
upstream cache {
server 192.168.1.2:8080 fail_timeout=5s max_fails=3;
server 127.0.0.1:82 backup;
}
location / {
proxy_pass http://cache;
proxy_next_upstream error http_502;
}
Убедитесь, что ваш основной сервер кеширования возвращает постоянную ошибку, чтобы сбой был обнаружен быстро.
Хороший трюк (не только для развертывания докеров) упоминается в https://sandro-keil.de/blog/let-nginx-start-if-upstream-host-is-unavailable-or-down/
Слава Сандро Кейлу - просто для справки - в основном он определяет преобразователь с таймаутом и все вышестоящие серверы через переменные:
server {
# this is the internal Docker DNS, cache only for 30s
resolver 127.0.0.11 valid=30s;
location ^~ /api/ {
# other config entries omitted for breavity
set $upstream api.awesome.com:9000;
# nginx will now start if host is not reachable
fastcgi_pass $upstream;
fastcgi_index index.php;
}
}
Я использую это решение для локальной разработки (позволяет мне запускать только подмножество служб с одной конфигурацией nginx), а также на производстве.