example.com hat Sie zu oft weitergeleitet. ERR_TOO_MANY_REDIRECTS

example.com hat Sie zu oft weitergeleitet. ERR_TOO_MANY_REDIRECTS

Ich habe versucht, Nginx mit Let’s Encrypt auf Ubuntu 16.04 zu sichern.

Datei example.confVorErhalt eines SSL-Zertifikats

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://example.com/Istfunktioniert gut.

Ich versuche, ein SSL-Zertifikat zu erhalten durch

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

Das Ergebnis war

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

Datei example.confnachErhalt eines SSL-Zertifikats

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://example.com/wird weitergeleitet zu https://example.com/Zu viel zeit

example.com redirected you too many times.
ERR_TOO_MANY_REDIRECTS
  1. Warum erfolgt eine so häufige Weiterleitung?

  2. was ist der Zweck des zweiten Serverblocks?

    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. So richten Sie alle Weiterleitungen ein aufhttps://www.example.com/?

BEARBEITEN1

Durch das Verschieben des von Certibot verwalteten Codes in den zweiten Serverblock wurde das Problem der zu vielen Weiterleitungen behoben. Aber meine Website leitet wieder zuHTTPanstelle von 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

        }

Antwort1

was ist der Zweck des zweiten Serverblocks?

Um auf HTTP zu hören und HTTP-Anfragen auf HTTPS umzuleiten.

Warum erfolgt eine so häufige Weiterleitung?

Es sollte nicht,es sei dennDie Website selbst lässt sich nicht gerne über HTTPS aufrufen und führt erneut eine Weiterleitung durch. Die Nginx-Konfiguration scheint in Ordnung zu sein.

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

Ändern

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

Zu

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

Sie können auch eine weitere Weiterleitung hinzufügen vonhttps://example.comZuhttps://www.example.com(im ersten Serverblock, der auf HTTPS lauscht); dadurch werden HTTPS-Anfragen ohne „www.“ am Anfang umgeleitet.

Antwort2

1. Warum erfolgt eine so häufige Weiterleitung?

Ihre Anwendung weiß nicht, ob die Anforderung über SSL eingegangen ist oder nicht. Das Hinzufügen der folgenden Zeile zu Ihrem Serverblock sollte das Problem beheben:

passenger_set_header X-Forwarded-Proto $scheme;

verwandte Informationen