Copie e entregue um pedido para outro servidor nginx para teste de tráfego real

6

Eu tenho um serviço web Flask que roda no uwsgi + nginx e funciona bem.

Eu tenho outra versão de desenvolvimento do serviço que é executado em outro servidor. Ele também roda no uwsgi + nginx.

O que eu quero fazer é, testar o servidor de desenvolvimento com tráfego 'real' (solicitações POST) que eu fiz verificando o servidor de desenvolvimento funciona bem basicamente. Só quero comparar os dois com o mesmo tráfego real.

Minha ideia básica para isso é como abaixo:

(A) é um servidor legado (B) é o servidor de teste

  1. Solicitações de usuários

  2. Nginx (A) obtém o pedido e entrega o pedido para o uwsgi (A) para manipulação.

  3. Nginx (A) 'copia' o pedido e entrega para Nginx (B) para testes

  4. uwsgi (A) manipula o pedido no Flask App (A) e responde ao usuário (via Nginx (A))

  5. O Nginx (B) manipula a solicitação, como o servidor herdado, mas não a resposta ao usuário (apenas registrando)

Isso faz algum sentido? Que abordagem devo seguir?

    
por Younggun Kim 12.06.2013 / 16:44

2 respostas

17

Eu mesmo encontrei a solução. Então, compartilho minhas descobertas aqui.

Eu usei a diretiva post_action para isso.

location / {
    uwsgi_pass      unix:app.sock;
    post_action @post_action; 
}

location @post_action {
    proxy_pass      http://dst_host:dst_port; 
}

O pedido foi entregue pela primeira vez ao unix: app.sock e quando foi concluído diretiva post_action passa o pedido para o local nomeado, @post_action.

Funciona como um encanto!

    
por 13.06.2013 / 14:44
0
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;
}

O pedido foi entregue pela primeira vez ao link e, quando foi concluído, post_action não conseguiu passar a solicitação para a localização nomeada, @ post_action. outra coisa que precisamos fazer?

    
por 23.05.2018 / 09:17

Tags