Nginx return 444 dependendo do código de resposta upstream

4

Eu tenho a configuração nginx para passar para um upstream usando o proxy pass. O upstream é escrito para retornar uma resposta http 502 em certas requisições, ao invés de retornar o 502 com todo o cabeçalho eu gostaria que o nginx recogurasse isso e retornasse 444 para que nada fosse retornado. Isso é possível?

Eu também tentei retornar 444 em qualquer erro 50x, mas também não funciona.

location / {
    return 444;
}


location ^~ /service/v1/ {
    proxy_pass http://127.0.0.1:3333;
    proxy_next_upstream error timeout http_502;
    error_page  500 502 503 504  /50x.html;
}

location = /50x.html {
    return 444;
}

error_page  404              /404.html;
location = /404.html {
    return 444;
}
    
por Mark 29.06.2012 / 16:37

2 respostas

4

Se o backend estiver realmente retornando um 502, e ele não estiver sendo gerado internamente pelo nginx porque o backend está inacessível, será necessário ativar proxy_intercept_errors para que sua diretiva error_page tenha efeito.

    
por 29.06.2012 / 19:30
2

Sim, é possível. De acordo com a documentação da error_page , pode ser feito assim ...

error_page  500 502 503 504 =444 /50x.html;

Da mesma forma ...

error_page 404 =444 /404.html;

Assim, toda a sua configuração de amostra se tornaria ...

location / {
    return 444;
}

location ^~ /service/v1/ {
    proxy_pass http://127.0.0.1:3333;
    proxy_next_upstream error timeout http_502;
    error_page  500 502 503 504 =444 /50x.html;
}

error_page  404 =444 /404.html;
    
por 29.06.2012 / 18:27

Tags