nginx resposta errada do upstream

1

Estou com um problema no meu upstream. Existe um bloco de localização para o aplicativo da web, conforme abaixo. Eu estou fazendo um teste A-B com isso.

location / {
   include backend.conf;
}

backend.conf

proxy_buffering on;
proxy_set_header RIP $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
set $session_id_included 'false';

if ($request_uri ~ ';jsessionid=') {
    set $session_id_included 'true';
}

if ($query_string ~ ';jsessionid=') {
    set $session_id_included 'true';
}

proxy_set_header SESSION_ID_INCLUDED $session_id_included;
proxy_pass_header  Set-Cookie;
proxy_intercept_errors on;
proxy_connect_timeout 30;
proxy_read_timeout 30;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_404 ;


proxy_set_header Host 'example.com';;
proxy_pass http://backend;

Este bloco de localização está olhando para isso:

upstream backend {
  ip_hash;
  server backend_server_1 max_fails = 0 weight = 80; # old web application
  server backend_server_2 max_fails = 0 weight = 20; # new web application
}

Na verdade, tudo funciona. No entanto, 404 respostas de erro são provenientes do backend_server_2 enquanto eu me conecto ao backend_server_1 com ip_hash.

Como obtenho respostas de erro 404 do servidor de back-end em que fiz login?

Se um usuário estiver conectado ao servidor backend_server_1 com ip_hash, os erros 404 deverão vir do servidor backend_server_1.

Se um usuário estiver conectado ao servidor backend_server_2 com ip_hash, os erros 404 deverão vir do servidor backend_server_2.

Obrigado

    
por Abdullah Ceylan 20.10.2017 / 23:48

1 resposta

0

Se a diretiva proxy_next_upstream contiver http_404 , então um erro 404 retornado de um servidor upstream fará com que o nginx passe essa solicitação para o próximo servidor upstream.

Remover a entrada não padrão http_404 fará com que o nginx atenda apenas as respostas 404 do servidor ao qual o usuário estava conectado.

Observe que, nesse caso, o parâmetro max_fails é pouco significativo, porque (citando proxy nginx manual do módulo ):

The directive also defines what is considered an unsuccessful attempt of communication with a server. [..] The cases of http_403 and http_404 are never considered unsuccessful attempts.

Isso significa que você pode usar tentativa de contabilização via max_fails para lidar mais facilmente com um lado do mau funcionamento de seu AB-Test. Se a preocupação 404 foi o motivo para desativá-la, reconsidere isso agora.

    
por 24.10.2017 / 00:50

Tags