Назад | Перейти на главную страницу

Зеркальное отображение 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).

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

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

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

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

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