Fazendo o Nginx enviar erros 4xx / 5xx do PHP-FPM

3

Eu tenho a configuração Nginx para inverter o proxy de todos os arquivos terminados em .php. Em alguns scripts, eu procuro por parâmetros e envio "406 Não Aceitável" como um erro genérico que precisa ser selecionado no jQuery / do Ajax. Eu posso mudar o erro, mas gostaria de poder enviá-lo para o lado do cliente. Se eu enviar 406, o Nginx o altera para o 502 Bad Gateway e injeta sua própria mensagem de erro.

Funciona para 404 e 403, mas esses erros não são realmente "aplicáveis" nesta circunstância; é uma API tão proibida não é uma boa prática RESTful.

Eu tentei usar o fastcgi_intercept_errors mas isso parece não fazer diferença.

Estou usando o Nginx 0.7 .

Parte do PHP:

header($_SERVER['SERVER_PROTOCOL'] . '406 Not Acceptable');
echo '{"error":"Missing Params"}';
exit;

Configuração Nginx

    location ~ .php$ {
            fastcgi_intercept_errors on;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
    }
    
por Mark 14.05.2013 / 23:06

1 resposta

4

Você está perdendo um espaço após o protocolo.

header($_SERVER['SERVER_PROTOCOL'] . ' 406 Not Acceptable'); //This works
header($_SERVER['SERVER_PROTOCOL'] . '406 Not Acceptable'); //This doesn't work.

Eu obtive o mesmo resultado que você estava vendo. Com o espaço faltando, o Nginx interceptou a resposta e deu uma página de erro 502. Ele passa o 406 até quando o espaço está lá.

    
por 17.05.2013 / 01:34