'return 404;' não respeita a configuração da página de erro personalizada no Nginx

3

Eu configurei minha página 404 personalizada para a maioria dos casos em Nginx usando global error_page configurações no bloco do servidor, no entanto, se eu fizer o seguinte dentro de um bloco de localização:

if ($uri ~* ...) {return 404;}

a página padrão Nginx 404 é retornada.

Existe uma maneira de retornar a página personalizada neste caso?

Atualizado: atualmente tenho algo parecido com isto

server {
    ...
    error_page    404    /html/error/404.html;
    ...
    root           /home/www-data/mysite/static;

    location ^~ /blah/blah/ {
        if ($uri ~* ...) { return 404; }
        ...
    }

    location ^~ /html/error/ {
        internal;
    }
}
    
por MLister 15.04.2013 / 04:01

2 respostas

1

Em vez de retornar 404 diretamente, use:

error_page 404 /404.html;
location / {
            try_files $uri =404;
}

Isso produziria um código de status HTTP 404 com uma página de erro 404 personalizada. Espero que isso ajude.

    
por 25.08.2014 / 09:07
0

"/ html / error" não deve estar nos caminhos root (absoluto) e error_path (relativo).

Onde está a raiz do documento? É realmente '/ home / www-data / mysite / static' quando há um subdiretório 'html /' disso? Você tem certeza que root não deveria ser '/ home / www-data / mysite / static / html'?

Qual é o padrão no lado direito da correspondência ~ *? Você pode ter um erro de regex que faz com que ele corresponda a tudo.

Ou o diretório raiz pode estar errado, e o nginx pode estar retornando 404 porque não pode encontrar o arquivo, e não porque o padrão "if" corresponde.

Por padrão, o log de erros nginx registrará o caminho real do sistema de arquivos que o nginx tentou acessar para uma solicitação que retornou 404 devido a um arquivo ausente. Veja os documentos nginx para log_not_found e error_log se esses erros não estão aparecendo no log de erros.

    
por 16.04.2013 / 15:12

Tags