Pregunta

Nginx + PHP (en fastCGI) funciona muy bien para mí. Cuando ingreso una ruta a un archivo PHP que no existe, en lugar de obtener la página de error 404 predeterminada (que viene para cualquier archivo .html no válido), simplemente obtengo un "No se ha especificado ningún archivo de entrada".

¿Cómo puedo personalizar esta página de error 404?

¿Fue útil?

Solución

Utiliza la propiedad error_page en nginx config .

Por ejemplo, si tiene la intención de establecer la página de error 404 en /404.html , use

error_page 404 /404.html;

Configurar la página de error 500 en /500.html es tan fácil como:

error_page 500 /500.html;

Otros consejos

Puede configurar una página de error personalizada para cada bloque de ubicación en su nginx.conf, o una página de error global para el sitio en su conjunto.

Para redirigir a una página 404 no encontrada simple para una ubicación específica:

location /my_blog {
    error_page    404 /blog_article_not_found.html;
}

Una página 404 de todo el sitio:

server {
    listen 80;
    error_page  404  /website_page_not_found.html;
    ...

Puede agregar códigos de error estándar juntos para tener una sola página para varios tipos de errores:

location /my_blog {
    error_page 500 502 503 504 /server_error.html
}

Para redirigir a un servidor totalmente diferente, suponiendo que tuviera un servidor ascendente llamado server2 definido en su sección http:

upstream server2 {
    server 10.0.0.1:80;
}
server {
    location /my_blog {
        error_page    404 @try_server2;
    }
    location @try_server2 {
        proxy_pass http://server2;
    }

El manual puede darle más detalles, o puede buscar google para los términos nginx.conf y error_page para ejemplos de la vida real en la web.

¡Cuidado con la sintaxis! Great Turtle los usó indistintamente, pero:

error_page 404 = /404.html;

Devolverá la página 404.html con un código de estado de 200 (porque = lo ha transmitido a esta página)

error_page 404 /404.html;

Devolverá la página 404.html con un código de error 404 (el original).

https://serverfault.com/questions/295789/nginx -return-correct-headers-with-custom-error-documents

La " error_page " El parámetro realiza una redirección, convirtiendo el método de solicitud en "OBTENER", no es una página de respuesta personalizada.

La solución más fácil es

     server{
         root /var/www/html;
         location ~ \.php {
            if (!-f $document_root/$fastcgi_script_name){
                return 404;
            }
            fastcgi_pass   127.0.0.1:9000;
            include fastcgi_params.default;
            fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;
        }

Por cierto, si desea que Nginx procese el estado 404 devuelto por los scripts PHP, debe agregar

[fastcgi_intercept_errors] [1] encendido;

Por ejemplo

     location ~ \.php {
            #...
            error_page  404   404.html;
            fastcgi_intercept_errors on;
         }

Estas respuestas ya no se recomiendan ya que try_files funciona más rápido que if en este contexto. Simplemente agregue try_files en su bloque de ubicación php para probar si el archivo existe, de lo contrario, devuelva un 404.

location ~ \.php {
    try_files $uri =404;
    ...
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top