example.com terlalu sering mengalihkan Anda. ERR_TOO_MANY_REDIRECTS

Saya mencoba Mengamankan Nginx dengan Let's Encrypt di Ubuntu 16.04.

file example.conf sebelum mendapatkan Sertifikat 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: // example. com / adalah berfungsi dengan baik.

Saya mencoba untuk Mendapatkan Sertifikat SSL oleh

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

hasilnya adalah

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

file example.conf setelah mendapatkan Sertifikat 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://example.com/ terlalu sering dialihkan ke https://example.com/

example.com redirected you too many times.
ERR_TOO_MANY_REDIRECTS
  1. Mengapa terlalu sering dialihkan?

  2. apa tujuan dari blok server kedua?

     server {
    if ($ host = www.example.com) {
      mengembalikan 301 https: // $ host $ request_uri;
     } # dikelola oleh Certbot
    
    
    if ($ host = example.com) {
      mengembalikan 301 https: // $ host $ request_uri;
     } # dikelola oleh Certbot
    
    
    server_name example.com www.example.com;
    dengarkan 80;
    kembali 404;  # dikelola oleh Certbot
    
      }
     
  3. Bagaimana cara membuat semua pengalihan ke https://www.example.com/ ?

EDIT1

Memindahkan kode yang dikelola certibot ke blok server kedua telah menghentikan terlalu banyak masalah pengalihan. Namun situs saya kembali lagi mengarahkan ke HTTP , bukan 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

        }
0
задан 3 September 2020 в 18:24
2 ответа

какова цель второго блока сервера?

Для прослушивания HTTP и перенаправления HTTP-запросов на HTTPS.

Почему он перенаправляет слишком много раз?

Это должно быть нет, если только сам веб-сайт не любит, когда его вызывают по HTTPS, и снова выполняет некоторое перенаправление. Конфигурация Nginx в порядке.

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

Измените

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

на

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

Вы также можете добавить еще одно перенаправление с https://example.com на https: //www.example .com (в первом блоке сервера, тот, который слушает HTTPS); это позаботится о перенаправлении запросов HTTPS без www. в начале.

1
ответ дан 4 January 2021 в 09:23

1. Почему перенаправляется слишком много раз?

Ваше приложение не знает, поступил ли запрос через SSL или нет, добавление следующей строки в блок сервера должно исправить это:

пассажиру_set_header X-Forwarded-Proto $ scheme ;

1
ответ дан 4 January 2021 в 09:23

Теги

Похожие вопросы