NGINX página de erro padrão

1

Estou tentando definir uma error_page padrão para todo o meu servidor nginx (como em todos os vhosts).

Estou tentando com o seguinte código:

http {
    ...
    ...
    error_page 404 /var/www/default/404.html;
    ...
    ...
}

Além disso, gostaria de poder criar um vhost e fazê-lo usar o padrão 404.html, se eu não escrever explicitamente outro.

Algo como:

server {
    ...
    server_name mydomain.com
    root /var/www/mydomain.com/;
    ...
}

De qualquer forma, estou recebendo o seguinte erro:

[error] 16842#0: *1 open() "/var/www/mydomain.com/var/www/default/404.html" failed (2: No such file or directory)

Embora eu entenda o erro, e eu entendo porque isso está acontecendo, não consigo entender por que não posso dizer ao NGINX para usar a página de erro padrão como um caminho absoluto em vez de anexá-lo à raiz do meu vhost.

Alguma ideia de como fazer isso?

Atenciosamente

    
por alexandernst 21.02.2013 / 16:37

3 respostas

3

Como você já descobriu, a diretiva error_page especifica um documento que é relativo ao documento root .

Uma maneira de contornar isso é criar um arquivo separado contendo as especificações da página de erro, que contém os blocos location apropriados e, em seguida, include de cada server que usará o "global" error_page .

Por exemplo, um arquivo /etc/nginx/global404 :

location = /404.html {
    root /var/www/default;
}

error_page 404 /404.html;

Agora, em cada bloco server , você irá:

include global404;
    
por 21.02.2013 / 20:08
1

Parece que o error_page é herdado apenas se não houver outras diretivas error_page no servidor / local. Então, para redefinir a error_page 404 para o seu servidor, basta definir outra página de erro, como:

server {
  error_page 399 /;
}

Este servidor não herdará error_page 404 (e nenhum outro) do bloco 'html'.

    
por 29.03.2016 / 14:30
0

Eu pretendo usar a abordagem include enviada anteriormente, mas, por uma questão de meticulosidade, uma alternativa: usar links simbólicos. Ele ainda requer uma operação extra para cada vhost que você gerencia, mas oferece o benefício de não exigir mais alterações e reinicializações de configuração do servidor.

http {
    ...
    ...
    error_page 404 /error/404.html;
    ...
    ...
}

... e depois na raiz de cada vhost ...

ln -s [path to error page html directory] /[vhost root]/error

Essa abordagem parece-me deselegante e não-portável (eu votaria se tivesse um número suficiente de representantes para votar ou não), mas funciona.

    
por 28.12.2013 / 21:35