nginx: a diretiva error_page é silenciosamente ignorada

7

Estou tentando retornar uma página de erro 400 personalizada para solicitações não HTTPS em nginx. Sou novo no nginx, mas li muitas páginas de exemplos em páginas de erro personalizadas e nada parece funcionar para mim. Minha configuração:

server {
    listen 80;

    error_page 400 /400.html;
    location = /400.html {
        root /var/www/html;
    }

    return 400;
}

O retorno está funcionando, porque se eu alterar o código (por exemplo, para 401 ou 500), recebo a página de erro nginx padrão apropriada. Eu sei que o arquivo existe, porque se eu tirar o retorno ele irá servir minha página 400.html diretamente sem problemas. Mas nada que eu tentei resultou na minha página personalizada aparecendo quando eu retornar o código de erro.

O que estou perdendo?

Atualização: Outras variantes que tentei de nenhuma maneira:

server {
    listen 80;

    error_page 400 /400.html;
    location = /400.html {
        root /var/www/html;
    }

    return 400;
}

server {
    listen 80;

    root /var/www/html;

    error_page 400 /400.html;
    location = /400.html {
        allow all;
    }

    return 400;
}

server {
    listen 80;

    root /var/www/html;
    error_page 400 /400.html;

    return 400;
}
    
por Derek Shockey 02.11.2011 / 01:50

1 resposta

6

Eu encontrei esta pergunta no Stackoverflow que realiza o que eu estava procurando.

Eu acho que por qualquer motivo, mesmo que um retorno funcione dentro de um bloco servidor , ele não respeita nenhuma diretiva error_page . Isso pode ser um bug ou um comportamento intencional que eu não entendo. A solução é colocar o retorno dentro de um bloco local :

server {
    listen 80;

    root /var/www/html;

    error_page 400 /400.html;
    location = /400.html {
        internal;
    }

    location / {
        return 400;
    }
}
    
por 02.11.2011 / 20:55