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.
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;
}
}
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.
"/ 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.
Tags nginx