ERR_TOO_MANY_REDIRECTS con Cloudflare: por qué pasa y cómo arreglarlo
Tu web funciona en el servidor, pero con Cloudflare da un bucle de redirecciones. Casi siempre es el modo Flexible: te explicamos cómo confirmarlo y cómo dejarlo bien.
En este artículo
Esto nos pasó con nuestra web de changelogs: en el servidor todo estaba bien, pero el navegador solo mostraba ERR_TOO_MANY_REDIRECTS («demasiados redireccionamientos»). La causa era una combinación muy común: el modo SSL Flexible de Cloudflare con un servidor que redirige a HTTPS. Te contamos por qué ocurre y cómo arreglarlo bien.
Por qué se produce el bucle
En el modo Flexible, la conexión va cifrada solo hasta Cloudflare. De Cloudflare a tu servidor viaja por HTTP normal. Si tu servidor está configurado para mandar todo lo que llega por HTTP a HTTPS, pasa esto:
El visitante pide la web por HTTPS a Cloudflare.
Cloudflare se la pide a tu servidor por HTTP.
Tu servidor ve HTTP y responde: «ve a la versión HTTPS».
Cloudflare le pasa esa respuesta al visitante.
El navegador vuelve a pedirla por HTTPS, y vuelta al paso 1.
Ninguna de las dos partes está mal por separado. El problema es que tu servidor nunca llega a ver que el visitante ya viene por HTTPS.
Cómo confirmarlo
Pregunta a la web sin seguir las redirecciones:
curl -sI https://ejemplo.com/Si es este caso, la web te manda a la misma dirección que acabas de pedir, y la respuesta viene de Cloudflare:
HTTP/2 301
location: https://ejemplo.com/
server: cloudflarePara verlo completo, deja que curl siga las redirecciones hasta un máximo:
curl -sIL --max-redirs 5 https://ejemplo.com/ -o /dev/null -w "%{http_code} %{num_redirects}\n"Si la respuesta es 301 5, ha agotado las cinco redirecciones sin llegar a ninguna página: hay bucle.
Después, mira el modo en el panel de Cloudflare, en SSL/TLS → Overview. Si pone Flexible, ya tienes al culpable.
La solución buena: Full (strict)
El modo Full (strict) cifra también el tramo entre Cloudflare y tu servidor, y comprueba que el certificado sea válido. El orden importa: primero el certificado, después el cambio de modo, para no dejar la web caída.
1. Pon un certificado en tu servidor
Tienes dos opciones:
Certificado de origen de Cloudflare (SSL/TLS → Origin Server). Es gratis y puede durar hasta 15 años. Solo es válido a través de Cloudflare: si algún día quitas el proxy, los navegadores no lo aceptarán.
Let's Encrypt. También gratis y válido para cualquiera, pero hay que renovarlo cada poco. Certbot lo hace solo.
2. Configura el servidor para HTTPS
En Nginx, por ejemplo:
server {
listen 80;
server_name ejemplo.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name ejemplo.com;
ssl_certificate /etc/ssl/ejemplo.com.pem;
ssl_certificate_key /etc/ssl/ejemplo.com.key;
# ... el resto de tu configuración
}Comprueba la configuración y recarga:
sudo nginx -t && sudo systemctl reload nginx3. Cambia el modo en Cloudflare
En SSL/TLS → Overview, elige Full (strict). El cambio tarda muy poco en aplicarse. Comprueba la web en una ventana privada, porque el navegador puede tener guardada la redirección anterior.
Si aparece otro error
Error 526: Cloudflare no da por válido el certificado. Puede estar caducado o no cubrir ese dominio.
Error 525: falló el saludo SSL entre Cloudflare y tu servidor. Revisa que el servidor escuche en el puerto 443 con SSL activo.
Error 521: tu servidor rechaza la conexión. Revisa que esté en marcha y que el cortafuegos permita las conexiones de Cloudflare.
Si sigue habiendo bucle
Reglas de redirección de Cloudflare: revisa que ninguna choque con la de tu servidor, por ejemplo una que lleve de
wwwa sinwwwy otra al revés.Redirecciones de la aplicación: WordPress, Laravel y otros también redirigen por su cuenta. Si van detrás de un proxy, tienen que saber que la conexión original era HTTPS, y para eso leen la cabecera
X-Forwarded-Proto.Caché: una redirección guardada puede seguir apareciendo después del arreglo. Purga la caché de Cloudflare y vuelve a probar.
¿Y si quito la redirección del servidor?
El bucle también desaparece así, pero no lo recomendamos. El tramo entre Cloudflare y tu servidor seguiría sin cifrar y cualquiera en ese camino podría leer o modificar el tráfico, aunque el visitante vea el candado en su navegador. Si tienes acceso al servidor, poner un certificado lleva unos minutos.
¿Tienes una web que se resiste? Escríbenos y le echamos un vistazo.