example.com te redireccionó demasiadas veces. ERR_TOO_MANY_REDIRECTS

example.com te redireccionó demasiadas veces. ERR_TOO_MANY_REDIRECTS

Estaba intentando proteger Nginx con Let's Encrypt en Ubuntu 16.04.

archivo ejemplo.confantesobtener un certificado SSL

server {
    server_name example.com www.example.com ;
    # Tell Nginx and Passenger where your app's 'public' directory is
    root /var/www/backup/mycode/public;
    # Turn on Passenger
    passenger_enabled on;
    rails_env development;
    passenger_ruby /usr/local/rvm/gems/ruby-2.5.6/wrappers/ruby;

}

http://ejemplo.com/esfuncionando bien.

Intento obtener un certificado SSL mediante

sudo certbot --nginx -d example.com -d www.example.com

el resultado fue

Your existing certificate has been successfully renewed, and the new certificate
has been installed.

The new certificate covers the following domains: https://example.com and
https://www.example.com

archivo ejemplo.confdespuésobtener un certificado SSL

server {
    server_name example.com www.example.com ;
    # Tell Nginx and Passenger where your app's 'public' directory is
    root /var/www/backup/example.com/public;
    # Turn on Passenger
    passenger_enabled on;
    rails_env development;
    passenger_ruby /usr/local/rvm/gems/ruby-2.5.6/wrappers/ruby;




    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
    if ($host = www.example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    if ($host = example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    server_name example.com www.example.com ;
    listen 80;
    return 404; # managed by Certbot

}

http://ejemplo.com/está redirigiendo a https://ejemplo.com/demasiadas veces

example.com redirected you too many times.
ERR_TOO_MANY_REDIRECTS
  1. ¿Por qué redirige demasiadas veces?

  2. ¿Cuál es el propósito del segundo bloque de servidor?

    server {
    if ($host = www.example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot
    
    
    if ($host = example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot
    
    
    server_name example.com www.example.com ;
    listen 80;
    return 404; # managed by Certbot
    
     }
    
  3. Cómo hacer todas las redirecciones ahttps://www.ejemplo.com/?

EDITAR1

Mover el código administrado de certibot al segundo bloque del servidor detuvo el problema de demasiadas redirecciones. Pero mi sitio web ha vuelto a dirigirse aHTTPen lugar de https.

server {
            server_name example.com www.example.com ;
            # Tell Nginx and Passenger where your app's 'public' directory is
            root /var/www/backup/example.com/public;
            # Turn on Passenger
            passenger_enabled on;
            rails_env development;
            passenger_ruby /usr/local/rvm/gems/ruby-2.5.6/wrappers/ruby;

        }
        server {

            listen 443 ssl; # managed by Certbot
            ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
            ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
            include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
            ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
            if ($host = www.example.com) {
                return 301 https://$host$request_uri;
            } # managed by Certbot


            if ($host = example.com) {
                return 301 https://$host$request_uri;
            } # managed by Certbot


            server_name example.com www.example.com ;
            listen 80;
            return 404; # managed by Certbot

        }

Respuesta1

¿Cuál es el propósito del segundo bloque de servidor?

Para escuchar en HTTP y redirigir solicitudes HTTP a HTTPS.

¿Por qué redirige demasiadas veces?

No debería,a menos queAl sitio web en sí no le gusta que lo llamen usando HTTPS y realiza alguna redirección nuevamente. La configuración de Nginx parece estar bien.

How to make all redirects to https://www.example.com/?

Cambiar

if ($host = example.com) {
    return 301 https://$host$request_uri;
}

a

if ($host = example.com) {
    return 301 https://www.$host$request_uri;
}

También puedes agregar otra redirección desdehttps://ejemplo.comahttps://www.ejemplo.com(en el primer bloque del servidor, el que escucha en HTTPS); esto se encargará de redirigir las solicitudes HTTPS sin "www". al principio.

Respuesta2

1. ¿Por qué se redirige demasiadas veces?

Su aplicación no sabe si la solicitud llegó a través de SSL o no, agregar la siguiente línea al bloque de su servidor debería solucionarlo:

passenger_set_header X-Forwarded-Proto $scheme;

información relacionada