
Configurar una redirección de nginx incorrectamente no sólo frustra a los usuarios. Afecta a tu posicionamiento en SEO, crea bucles de redirección que bloquean los navegadores y deja URLs antiguas devolviendo 200 cuando no deberían. Consigue las directivas correctas la primera vez.
¿Qué es una redirección de Nginx?
Una redirección de nginx es una configuración del lado del servidor que envía a los visitantes y a los motores de búsqueda de una URL a otra. Nginx evalúa las solicitudes entrantes contra bloques de servidor y bloques de ubicación, luego decide si servir contenido, hacer proxy o redirigir a un nuevo destino.
301 vs 302: ¿Cuál usar?
301 es permanente. Úsalo cuando una URL se ha movido de forma permanente y deseas que los motores de búsqueda transfieran las señales de ranking a la nueva ubicación. 302 es temporal. Utilízalo para ventanas de mantenimiento, pruebas A/B o situaciones donde la URL original volverá. Los navegadores almacenan en caché agresivamente los 301, así que no los uses para nada que pudieras revertir.
Requisitos previos y ubicaciones de archivos
Necesitas acceso root o sudo para editar archivos de configuración de nginx. La configuración principal se encuentra en /etc/nginx/nginx.conf. Las configuraciones específicas del sitio van en /etc/nginx/sites-available/, con enlaces simbólicos en /etc/nginx/sites-enabled/ para activarlas. Siempre haz una copia de seguridad antes de editar:
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bakCómo configurar redirecciones de Nginx
Nginx ofrece tres directivas principales para redirecciones: return, rewrite y try_files. Cada una tiene un caso de uso específico.
Usando la directiva return
La directiva return es la opción más eficiente. Detiene el procesamiento de inmediato y envía el código de estado y la URL al cliente. Sintaxis:
return [status_code] [URL];Ejemplo: redirigir todo el tráfico de un dominio antiguo a uno nuevo:
server { listen 80; server_name old-domain.com; return 301 https://new-domain.com$request_uri; }La variable $request_uri preserva la ruta y la cadena de consulta, por lo que /blog/post se convierte en https://new-domain.com/blog/post.
Usando la directiva rewrite
La directiva rewrite utiliza regex para coincidir y transformar URLs. Es más flexible que return pero más lenta y más difícil de depurar:
rewrite ^/old-path(.*)$ /new-path$1 permanent;La bandera permanente la convierte en un 301. Usa redirect para el 302. Si no necesitas coincidencias regex, usa return en su lugar. Las reglas de reescritura se evalúan en secuencia y pueden activar múltiples reescrituras por solicitud.
Usando try_files para redirecciones de respaldo
try_files verifica archivos por orden y recurre a una ubicación especificada si no existen:
location / { try_files $uri $uri/ /index.php?$query_string; }Esto no es una redirección tradicional, sino que identifica casos donde las URLs limpias necesitan recurrir a un controlador frontal.
Casos de uso comunes de redirección en Nginx
Redirigir HTTP a HTTPS
El patrón estándar para forzar HTTPS:
server { listen 80; server_name example.com www.example.com; return 301 https://example.com$request_uri; }Redirigir www a no-www
Redirección canónica para eliminar el subdominio www:
server { listen 443 ssl; server_name www.example.com; return 301 https://example.com$request_uri; }Redirigir una URL o ruta específica
Redirección de una sola URL utilizando un bloque de ubicación:
location = /old-page { return 301 /new-page; }El modificador = hace una coincidencia exacta, que es más rápida que la coincidencia por prefijo o regex.
Redirigir un dominio entero
Redirección general para migraciones de dominio:
server { listen 80; server_name old-site.com; return 301 https://new-site.com$request_uri; }Mejores prácticas para redirección en Nginx
Evitando cadenas y bucles de redirección
Una cadena de redirección es cuando la URL A redirige a B, que redirige a C. Cada salto agrega latencia y puede confundir a los rastreadores. Mantén las cadenas a un máximo de una redirección. Un bucle de redirección es cuando A redirige a B y B redirige de vuelta a A, lo que mata la solicitud por completo. Siempre prueba con curl:
curl -I http://example.comProbando tu configuración
Antes de recargar nginx, valida la configuración:
sudo nginx -tSi pasa, recarga sin perder conexiones:
sudo systemctl reload nginxNunca saltes la validación. Un error de sintaxis en el archivo de configuración apaga todo el servidor.
FAQ: Redirección en Nginx
return es más rápido porque detiene el procesamiento de inmediato. rewrite pasa por todo el ciclo de procesamiento de nginx y admite transformaciones regex. Usa return para redirecciones simples y rewrite solo cuando necesites manipulación de URL basada en regex.
Agrega un bloque de servidor escuchando en puerto 80 con: return 301 https://tudominio.com$request_uri; eso envía todo el tráfico HTTP al equivalente HTTPS de forma permanente.
Crea un bloque de servidor para www.tudominio.com y devuelve 301 https://tudominio.com$request_uri; asegúrate de que tu certificado SSL cubra ambas versiones, www y no-www.
Ejecuta sudo nginx -t para validar la sintaxis. Luego usa curl -IL https://tudominio.com/path para rastrear toda la cadena de redirección antes de recargar el servidor en vivo.