Nginx зеркальное отображение без зеркального модуля

Случилось так, что кто-то, кто больше не работает в моей компании, решил вручную скомпилировать 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).

Итак, в этой конфигурации игнорируются ответы от зеркального сервера или нет?

1 ответ

Решение

Вы можете обновить nginx без разрыва соединения с одним клиентом: https://www.digitalocean.com/community/tutorials/how-to-upgrade-nginx-in-place-without-dropping-client-connections

Обновление: следующий текст попадает на ваш вопрос в комментариях:

Первый шаг к корректному обновлению нашего исполняемого файла - это обновление вашего двоичного файла. Делайте это, используя любой метод, подходящий для вашей установки Nginx, будь то через менеджер пакетов или исходную установку.

Таким образом, вы можете выполнить чистую установку исходных текстов, используя любой модуль, который вы хотите включить или исключить, а затем использовать этот двоичный файл для процесса обновления.

Другие вопросы по тегам