У меня есть веб-служба Flask, которая работает на uwsgi + nginx, и она хорошо работает.
У меня есть другая разрабатываемая версия службы, работающая на другом сервере. Он также работает на uwsgi + nginx.
Что я хочу сделать, так это протестировать сервер разработки с «реальным» трафиком (запросы POST). Я проверил, что сервер разработки в основном работает хорошо. Просто хочу сравнить эти два с одинаковым реальным трафиком.
Моя основная идея выглядит так:
(A) старый сервер (B) тестовый сервер
Запросы пользователей
Nginx (A) получает запрос и доставляет его в uwsgi (A) для обработки.
Nginx (A) «копирует» запрос и доставляет его в Nginx (B) для тестирования.
uwsgi (A) обрабатывает запрос в приложении Flask (A) и ответ пользователю (через Nginx (A))
Nginx (B) обрабатывает запрос, как устаревший сервер, но не отвечает пользователю (просто ведет журнал)
Есть ли в этом смысл? Какой подход я должен выбрать?
Я сам нашел решение. Итак, я делюсь своим выводом здесь.
я использовал post_action директива для этого.
location / {
uwsgi_pass unix:app.sock;
post_action @post_action;
}
location @post_action {
proxy_pass http://dst_host:dst_port;
}
Сначала запрос доставляется в unix: app.sock, а когда он завершается, директива post_action передает запрос в указанное место, @post_action.
Работает как часы!
location / {
proxy_pass http://y.y.y.y:port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
post_action @post_action;
}
location @post_action {
proxy_pass http://x.x.x.x:port;
access_log /var/log/nginx/c.log application;
error_log /var/log/nginx/c.log error;
}
Запрос сначала доставлен http: //y.y.y.y: порт и когда он завершится, post_action не сможет передать запрос в указанное место, @ post_action. Есть ли что-то еще, что нам нужно сделать?