Sirva uma página 404 customizada gerada pelo PHP

4

Aqui está como minha configuração do php-fpm é:

location @site {
    fastcgi_pass   unix:/var/run/php5-fpm.sock;
    include fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME $document_root/index.php;

    fastcgi_intercept_errors on;
    error_page 404 /404;
}

Como fastcgi_intercept_errors está ativado, quando meu roteador PHP retorna um 404, o Nginx redireciona para /404 . Bom .

Mas como /404 é gerado pelo meu aplicativo PHP, e meu aplicativo PHP define corretamente um código de resposta 404 , o Nginx tentará manipular o erro novamente! (que obviamente termina em um loop)

Existe uma solução para isso?

    
por Matthieu Napoli 16.09.2014 / 11:31

2 respostas

2

O nginx está fazendo isso porque você disse a ele.

    fastcgi_intercept_errors on;

Isso significa que o nginx não apresentará respostas de erro geradas pelo PHP , mas terá o nginx lidando com elas. Assim você entra no seu loop infinito.

Para resolver o problema, remova essa diretiva (o padrão é off ) ou defina explicitamente como off .

    
por 16.09.2014 / 14:07
0

Faça seu script que gera a página de erro para retornar o HTTP 200 (ou seja, uma página apropriada) e ele deve funcionar imediatamente.

O nginx irá recuperar o corpo do / 404 e atualizará o status da resposta para ser 404.

P.S. como um bônus, você pode querer definir um local explícito (por exemplo, location = / 404) e ligar o fastcgi_cache lá para que o backend do PHP não seja consultado toda vez que você precisar exibir a sua página de erro.

    
por 17.09.2014 / 12:25