Manipulando erros no nginx em uma configuração de proxy reverso

4

Estou usando o nginx como um proxy reverso no meu servidor web existente. Eu só quero gerenciar um único conjunto de páginas de erro personalizadas e, idealmente, dentro do nginx, pois esse é o nível mais próximo do cliente.

Agora, estou usando as configurações error_pages e proxy_intercept_errors . No entanto:

  1. No caso de erros 400 (Bad Request), preciso que o servidor da Web subjacente consiga por meio de algum conteúdo do corpo do JSON, detalhando por que a solicitação foi ruim. Então, preciso de uma maneira de desativar o proxy_intercept_errors apenas para 400 códigos de status.

  2. Eu nunca quero mostrar as páginas de erro nginx padrão, para qualquer código de status. Agora, pelo que eu vejo, para conseguir isso eu precisaria listar explicitamente todos os possíveis códigos de status imagináveis, e ter uma página de erro para isso? Em vez de apenas curingar todos os erros acima de 500, por exemplo.

Minhas perguntas são - Os 2 problemas acima são resolvidos dentro do próprio nginx? Se não, existe uma solução óbvia para os problemas acima?

    
por isNaN1247 17.08.2012 / 12:03

2 respostas

4

Eu não tinha lido a documentação corretamente. Na verdade, o desvio das regras por um erro 400 é simples, pois não tem uma diretiva de página de erro.

Esta é a entrada da documentação proxy_intercept_errors :

If you set this to on then nginx will intercept status codes that are explicitly handled by an error_page directive. Responses with status codes that do not match an error_page directive will be sent as-is from the proxied server. (emphasis my own)

    
por 19.08.2012 / 10:23
1

Tente o seguinte. Inclua este mapa no seu contexto http.

map $sent_http_status_code $400 {
  default 0;
  ~400    1;
}

Inclua o seguinte no contexto do seu servidor (do proxy, é claro).

if ($400) {
  proxy_pass (socket|address:port);
}

Em relação à sua segunda pergunta. Você pode especificar um único arquivo para mais erros, como o seguinte:

error_page 500 501 502 503 504 505 /500.html

A Wikipédia tem todos os códigos de status HTTP válidos listados com uma breve explicação: link

    
por 18.08.2012 / 02:53