2011-09-23 8 views
13

Tengo nginx 0.8.53 configurado con algunos hosts virtuales que funcionan como yo quiero. Sin embargo, debido a la 'mejor coincidencia' de nginx en los hosts virtuales, necesito agregar un host predeterminado para capturar todas las solicitudes que no sean para un host virtual específico. Me gustaría que el host predeterminado devuelva una página 404 que no indique que estoy ejecutando nginx 0.8.53.Cómo hacer que nginx siempre devuelva un 404 personalizado para el host predeterminado

Supuse que debería ser algo como:

# The default server. 
# 
server { 
    listen  80 default_server; 
    server_name everythingelse; 

    # Everything is a 404 
    location/{ 
     return 404; 
    } 
    error_page 404 /opt/local/html/404.html; 
} 

Pero esto sigue devolviendo la página por defecto nginx 404 que tiene el número de versión .. Parece que el 'retorno 404' ignora la configuración 'error_page' ..

Respuesta

2

Mover la directiva error_page el conf para antes de llamar retorno 404.

Esto debería funcionar:

# The default server. 
# 
server { 
    listen  80 default_server; 
    server_name everythingelse; 
    error_page 404 /error_docs/404.html; 

    # Everything is a 404 
    location/{ 
     return 404; 
    } 

    # Custom Error Page 
    location /error_docs { 
     alias /opt/local/html/; 
     log_not_found off; 
     access_log off; 
    } 
} 

Esto usará el mismo personalizado para todos los sitios (servidores). Debe agregar la ubicación de los documentos de error.

http { 
error_page 404 /error_docs/404.html; 

... 

    # The default server. 
    # 
    server { 
     listen  80 default_server; 
     server_name everythingelse; 

     # Everything is a 404 
     location/{ 
      return 404; 
     } 

     # Custom Error Page 
     location /error_docs { 
      alias /opt/local/html/; 
      log_not_found off; 
      access_log off; 
     } 
    } 
} 
3

Muy pocas directivas en nginx toman una ruta del sistema de archivos. ¿Quieres algo como:

# The default server. 
server { 
    listen  80 default_server; 
    server_name everythingelse; 

    root /opt/local/html; 

    error_page 404 /404.html; 

    # Everything is a 404 
    location/{ 
    return 404; 
    } 

    # EDIT: You may need this to prevent return 404; recursion 
    location = /404.html { 
    internal; 
    } 
} 
+0

Su código le dará la página por defecto 404 que dice que no quiere (y ya recibe de todos modos) y en segundo lugar , la directiva error_page le permite especificar una página de error personalizada. De hecho, "error_page 404/404.html "simplemente significa usar el archivo 404.html (archivo predeterminado 404) en la carpeta de instalación de nginx. Esto también puede ser" error_page 404 /path/to/any/other/404.html "Alternativamente, podría cambiar el archivo predeterminado – Dayo

+1

La página 404 predeterminada no es un archivo en absoluto, y la página de error * no * toma una ruta del sistema de archivos. Redirige internamente al uri dado, por lo que busca a /404.html. Puede ser necesario agregar location = /404.html {internal;} o similar para evitar que se muestre la página predeterminada 404, ahora que lo pienso, porque el redireccionamiento interno terminará de nuevo en la ubicación/y no estoy seguro de cuál es la devolución 404 ; lo hará allí sin recursive_error_pages on; (que de todos modos sería malo). – kolbyjack

+0

"La página 404 predeterminada no es un archivo en absoluto" es incorrecta. Puede encontrarla en la carpeta/usr/share/nginx/html/(en redhat: puede ser diferente para los demás). La directiva error_page toma un uri que puede estar debajo de la raíz web o alias como necesario. – Dayo

22

Aquí lo que tengo en mi conf para hacer que funcione:

# The default server. 
server { 
    listen  80 default_server; 
    server_name everythingelse; 

    error_page 404 /404.html; 

    # Everything is a 404 
    location/{ 
    return 404; #return the code 404 
    } 

    # link the code to the file 
    location = /404.html { 
    #EDIT this line to make it match the folder where there is your errors page 
    #Dont forget to create 404.html in this folder 
    root /var/www/nginx/errors/; 
    } 
} 
Cuestiones relacionadas