Случилось так, что кто-то, кто больше не работает в моей компании, решил вручную скомпилировать nginx, не зная точно, что он делает, и запустил его в производство.
Теперь мы не можем добавлять модули, и мы находимся в ситуации, когда мы не можем просто выключить nginx и начать заново со свежим экземпляром, потому что это помешает клиенту (потому что он находится в производстве).
Чтобы приблизиться к сути (где мы можем заменить этот экземпляр nginx новым и свежим), мы хотели бы реализовать зеркалирование. Опять же, мы не можем установить модуль зеркала прямо сейчас. Надо как-то иначе.
Я ничего не знаю о nginx, но я тот, кто всегда хочет учиться, и люблю исследовать Интернет, чтобы обсуждать вещи с людьми.
По сути, у нас есть nginx, который работает как обратный прокси. Запросы, отправленные на url/apis*
перенаправляются на внутренний сервер API. В целях тестирования нам необходимо отразить этот трафик на другой сервер. Кто-то на работе придумал это решение, используя post_action
.
location ~* /apis*$ {
proxy_pass http://api_server/$1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass_request_headers on;
gzip "on";
keepalive_timeout 10;
post_action @mirror_test;
}
location @mirror_test{
proxy_ignore_client_abort on;
proxy_pass http://test_api_server/$1;
}
}
Теперь это решение правильно отражает трафик, но мы не уверены, игнорируются ли ответы. Чтение на документация зеркального модуля, в нем говорится, что ответы на зеркальные подзапросы, использующие этот модуль, игнорируются, и мы хотели бы получить такое же поведение. Ответы клиентам должны поступать только с главного сервера (api_server
), а не с зеркального (test_api_server
).
Итак, в этой конфигурации игнорируются ли ответы, поступающие от зеркального сервера?
Вы можете обновить nginx, не разрывая ни одного клиентского соединения: https://www.digitalocean.com/community/tutorials/how-to-upgrade-nginx-in-place-without-dropping-client-connections
Обновление: следующий текст соответствует вашему вопросу в комментариях:
Первый шаг к правильному обновлению нашего исполняемого файла - это фактическое обновление вашего двоичного файла. Сделайте это, используя любой метод, подходящий для вашей установки Nginx, будь то с помощью диспетчера пакетов или исходной установки.
Таким образом, вы можете выполнить чистую установку источников, используя любой модуль, который вы хотите включить или исключить, а затем использовать этот двоичный файл для процесса обновления.