Espelhando o tráfego com o Nginx

16

Preciso duplicar / espelhar o tráfego que chega ao meu servidor / recurso.

Quero dizer, eu tenho o servidor A e B e N (nginx) como servidor da web.

Todo o tráfego que chega a N / recurso -> redireciona para A e B

É possível?

Agus
fonte
2
Você provavelmente não quer fazer isso. O que você realmente está tentando fazer?
Michael Hampton
1
Eu realmente preciso dele para fazê-lo
Agus
2
Eu tenho um caso de uso. Eu tenho um cliente enviando dados para meus servidores que nossa infraestrutura de produção usa. Preciso dos mesmos dados enviados aos meus servidores de desenvolvimento para um maior desenvolvimento. O cliente é capaz apenas de enviar os dados para 1 ponto final. Não pergunte por que, eu não sei.
The Dude
1
Oh eu preciso de tráfego duplicado, quero dizer o traficc irá processar por A, mas B vai recevid processo desligada make
Agus
2
Encontrei outra versão desta pergunta com uma resposta que me ajudou: serverfault.com/a/515531/175380 Basicamente, você define o local a ser espelhado em uma post_actiondiretiva. Isso será executado após a solicitação ter sido atendida pela máquina de produção.
Adam Lukens

Respostas:

14

O Nginx agora tem um módulo de espelho http. A documentação está em https://nginx.org/en/docs/http/ngx_http_mirror_module.html

Exemplo de configuração da documentação:

location / {
    mirror /mirror;
    proxy_pass http://backend;
}

location /mirror {
    internal;
    proxy_pass http://test_backend$request_uri;
}
Slack Undertow
fonte
Existe uma maneira de usar um espelho, mesmo que um dos hosts esteja inoperante, eu tenho um caso de uso para isso.
Sagar Kharab
3

Aqui está um novo recurso do nginx (1.13.4): http://nginx.org/en/docs/http/ngx_http_mirror_module.html#mirror

O módulo ngx_http_mirror_module (1.13.4) implementa o espelhamento de uma solicitação original criando sub-requisições de espelhamento em segundo plano. As respostas às sub-solicitações de espelhamento são ignoradas.

BLiN
fonte
2

Baseado no LEIA - ME Parece que o GOR pode ajudá-lo a resolver seu problema.

Eu nunca o usei antes, apenas tropecei nessa semana, então boa sorte!

Marcel
fonte
Ei, usando o GOR, ele apenas reconhece com um http 200. Portanto, se ele tem um objeto de resposta ou validação, ele quer fazer o que o cliente está enviando, não acho que isso funcionará para ele. Pelo que sei, e sou novo no Gor, você não pode transmitir o objeto de resultado de um dos seus segmentos de saída.
PatrickWalker
Estamos testando o GOR agora e temos alguns problemas. Ele interpreta os cabeçalhos como: Location: // newpath gerando solicitações como GET // newpath. Redireciona cabeçalhos originais soltos (incluindo o host do usuário, etc.) Estamos migrando para outra ferramenta.
Aalex Gabi
1

você não pode espelhar solicitações com NGINX, mas a solicitação está disponível como uma variável. Você pode usar o script Lua para enviar essa variável para um servidor de terceiros como uma sub-solicitação. http://nginx.org/en/docs/http/ngx_http_core_module.html#var_request

Mohammad Mahzoun
fonte
0

Depois de cavar e cavar, encontrei uma solução. Você pode vê-lo aqui Copie e envie uma solicitação para outro servidor nginx para teste de tráfego real por @scari

Apenas pensei em mencioná-lo aqui para facilitar a busca por outras pessoas. Na minha instalação, não usei o uwsgi - em vez disso, queria duplicar todas as solicitações recebidas em servidores adicionais (além dos servidores de backbones que já tinham balanceamento de carga.

Espero que ajude,
Liron

Liron
fonte