Copiar y entregar una solicitud a otro servidor nginx para pruebas de tráfico real

Tengo un servicio web de Flask que funciona en uwsgi + nginx y funciona bien.

Tengo otra versión de desarrollo del servicio que se ejecuta en otro servidor. También funciona en uwsgi + nginx.

Lo que quiero hacer es probar el servidor de desarrollo con el tráfico "real" (solicitudes POST) que he hecho comprobar que el servidor de desarrollo funciona bien básicamente. Sólo quiero comparar los dos con el mismo tráfico real.

Mi idea básica para esto es como a continuación:

(A) es el servidor heredado (B) es el servidor de prueba

  1. Solicitudes de los usuarios

  2. Nginx (A) recibe la solicitud y entrega la solicitud a uwsgi (A) para su manipulación.

  3. Nginx (A) 'copia' la solicitud y la entrega a Nginx (B) para la prueba

  4. Uwsgi (A) maneja la solicitud en Flask App (A) y la respuesta al Usuario (vía Nginx (A))

  5. Nginx (B) manejar la solicitud como el servidor de legado hace, pero no la respuesta al usuario (sólo registro)

¿Tiene sentido esto? ¿Qué enfoque debo tomar?

Encontré la solución yo mismo. Así que comparto mis descubrimientos aquí.

Utilicé la directiva post_action para esto.

location / { uwsgi_pass unix:app.sock; post_action @post_action; } location @post_action { proxy_pass http://dst_host:dst_port; } 

La solicitud se entregó por primera vez a unix: app.sock y cuando se completó, la directiva post_action pasa la solicitud a una ubicación con nombre, @post_action.

¡Funciona a las mil maravillas!

    Intereting Posts