Nginx: too many redirects al redirigir http a https

Este caso lo tuvimos hace unos días. Es una tontería, pero te puede hacer perder un tiempo innecesario.

Teníamos una web en Nginx donde queríamos redirigir todos los http (puerto 80) a https (puerto 443).

Esto es bastante sencillo, sólo hay que poner la línea:

return 301 https://$host$request_uri;

O, si quieres sólo una página en concreto: return 301 https://tudominio.com$request_uri;

El problema es que, cuando activábamos esto, aunque Nginx en el test decía que todo bien, al reiniciar nos daba el error de “Too many redirects“.

Solución.

La solución es sencilla, seguramente tienes puesto http y https en el mismo bloque de Nginx, y está intentando redirigir ambas peticiones.Es decir las peticiones al 80 se redirigen al 443, y estas se vuelven a redirigir. Tendrás algo como:

server {
  listen 80;
  listen [::]:80;
  server_name tudominio.com;
  listen 443 ssl;
  listen [::]:443 ssl;
....................................
}

Lo que tienes que hacer es dividir esto en dos bloques, para que sólo se redirijan las peticiones al puerto 80.

server {
  listen 80;
  listen [::]:80;
  server_name tudominio.com;
  return 301 https://$host$request_uri
}
server {
  listen 443 ssl;
  listen [::]:443 ssl;
  server_name tudominio.com;
....................................
}

Deja un comentario

Resumen de nuestra Política de Privacidad

  • Responsable: SmythSys IT Consulting SLNE.
  • Finalidad: Gestionar y moderar los comentarios.
  • Legitimación: Necesitas dar tu consentimiento para publicar un comentario.
  • Destinatarios: Tus datos se alojan en los servidores de OVH.
  • Derechos: Tienes derecho a acceder, rectificar, limitar y suprimir los datos en la dirección del responsable (en nuestra política de privacidad).

Time limit is exhausted. Please reload CAPTCHA.