Pergunta

Nginx + PHP (em fastCGI) funciona muito bem para mim. Quando eu entrar em um caminho para um arquivo PHP que não existe, em vez de começar a página de erro padrão 404 (que vem para qualquer arquivo .html inválido), eu simplesmente obter um "Não arquivo de entrada especificado.".

Como posso personalizar esta página de erro 404?

Foi útil?

Solução

Você usar a propriedade error_page no nginx configuração .

Por exemplo, se você pretende definir a página de erro 404 para /404.html, uso

error_page 404 /404.html;

Definindo a página de erro 500 para /500.html é tão fácil como:

error_page 500 /500.html;

Outras dicas

Você pode configurar uma página de erro personalizada para cada bloco local em sua nginx.conf, ou uma página de erro global para o site como um todo.

Para redirecionar a uma simples página 404 não encontrado para um local específico:

location /my_blog {
    error_page    404 /blog_article_not_found.html;
}

Um local de grande página 404:

server {
    listen 80;
    error_page  404  /website_page_not_found.html;
    ...

Você pode acrescentar códigos de erro padrão juntos para ter uma única página para vários tipos de erros:

location /my_blog {
    error_page 500 502 503 504 /server_error.html
}

Para redirecionar a um servidor totalmente diferente, supondo que você tinha um server2 servidor nomeado montante definido na sua seção http:

upstream server2 {
    server 10.0.0.1:80;
}
server {
    location /my_blog {
        error_page    404 @try_server2;
    }
    location @try_server2 {
        proxy_pass http://server2;
    }

O manual do pode lhe dar mais detalhes, ou você pode procurar google para os termos nginx.conf e error_page de exemplos da vida real na web.

Tenha cuidado com a sintaxe! Grande Turtle usou-os como sinônimos, mas:

error_page 404 = /404.html;

retornará a página 404.html com um código de status 200 (porque = transmitiu que a esta página)

error_page 404 /404.html;

retornará a página 404.html com um (o original) 404 código de erro.

https://serverfault.com/questions/295789/nginx -Retornar-corretas-headers-com-personalizados-error-documentos

O parâmetro "error_page" faz um redirecionamento, convertendo o método de solicitação de "GET", não é uma página de resposta personalizado.

A solução mais fácil é

     server{
         root /var/www/html;
         location ~ \.php {
            if (!-f $document_root/$fastcgi_script_name){
                return 404;
            }
            fastcgi_pass   127.0.0.1:9000;
            include fastcgi_params.default;
            fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;
        }

A propósito, se você quiser Nginx para processar 404 status retornado por scripts PHP, você precisa adicionar

[fastcgi_intercept_errors][1] on;

por exemplo.

     location ~ \.php {
            #...
            error_page  404   404.html;
            fastcgi_intercept_errors on;
         }

Estas respostas não são mais recomendadas desde obras try_files mais rápido do que if neste contexto. Basta adicionar try_files em sua php bloco local para testar se o arquivo existe, caso contrário retorna a 404.

location ~ \.php {
    try_files $uri =404;
    ...
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top