Как реализовать частичное зеркалирование в nginx?

Я хочу протестировать раннюю новую версию сервера, и для этого я хочу отразить часть реальных запросов, поступающих на производственный сервер на моем тестовом сервере.

Модуль зеркала позволяет мне зеркалировать весь трафик, но я не нашел, как выполнить частичное зеркалирование запросов, например, я хочу зеркалировать ] 30% трафика.

Возможно ли это? Если да, то как?

4
задан 27 November 2018 в 10:54
2 ответа

Если у вас два веб-сервера и вы хотите отправлять 30% запросов на сервер A и 70% запросов на сервер B вы можете поставить балансировщик нагрузки перед двумя веб-серверами. В любом случае вы должны поставить балансировщик нагрузки перед двумя веб-серверами, иначе весь трафик будет идти только на один или другой сервер.

С помощью весов вы можете указать, сколько трафика должно идти на первый или второй сервер. Ниже приведен простой пример:

http {
  upstream myapp1 {
    server srv1.example.com weight=3;
    server srv2.example.com weight=7;
  }
  server {
    listen 80;
    location / {
      proxy_pass http://myapp1;
    }
  }
}

РЕДАКТИРОВАТЬ: Когда оба сервера являются производственными, вы можете использовать модуль зеркало на srv1.example.com для отправки 30% трафика на ваш тестовый сервер. Согласен, это немного грязный прием, поэтому не стесняйтесь голосовать против, когда будут предложены лучшие решения.

РЕДАКТИРОВАТЬ 2: назначьте одинаковый IP-адрес обеим записям DNS A, если у вас только один сервер.

3
ответ дан 3 December 2019 в 03:39
http {
 ...
  split_clients "${remote_addr}AAA" $mirror_allowed {
    30% 1;
    * "";
  }
}

server {
 ...
  location / {
   ...
    mirror /mirror;
  }

  location /mirror {
    internal;
    if ($mirror_allowed = "") { 
      return 200; 
    }
    proxy_pass https://some.mirror.endpoint$request_uri;
  }
}
2
ответ дан 29 December 2019 в 08:07

Теги

Похожие вопросы