17 enero 2008

Cómo redireccionar el error 404 en nginx

Este problema nos surgió debido a páginas de publicidad mal formadas por el anunciante, de modo que se producía un error 404 en nuestro servidor web, y nuestro servidor web tiene una redirección automática, de modo que los errores 404 terminan en la página raíz.

Consecuencias de todo esto; pues muy fácil, teníamos un aumento de visitas directas que no acertábamos a saber de dónde venían y que no nos terminamos de creer (efectivamente comprobamos que este aumento no estaba debido a lo buenos que éramos, sino simplemente a los errores :-) ).

Optamos por investigar cómo podríamos redireccionar a una página sin redirección el 404 producido por estos errores del anunciante y finalmente encontramos la solución.

Editamos el fichero nginx.conf y en la parte donde indicamos dónde se aloja el html del 404 introdicmos un location donde introducimos la condición.

Este sería el código:

 error_page  404              /404.html;
location /404.html {
if ($request_uri ~ cadenaenelrequest.* ) {
root /var/www/html/midominio.com/errors;
}
root /var/www/html/midominio.com;

}



Simplemente tenemos el fichero 404.html en el sitio habitual y el fichero 404.html modificado sin redirección en la carpeta errors que hemos creado para nuestro propósito (en realidad podríamos ponerle otro nombre al fichero para evitar confusiones).

cadenaenelrequest es el principio de la petición errónea, supongo que se puede identificar de más maneras, pero fue la que se nos ocurrió.

Por supuesto finalmente hay que reiniciar nginx para que coja los cambios.

1 comentario:

Eduardo Mendoza dijo...

Buenas
A la hora de reiniciar nginx, me dice que la directiva location no esta permitida, a que se debe esto?

Un saludo.