nginx "ERR_TOO_MANY_REDIRECTS" после добавления ssl
После того, как я добавлю сертификат Let's Encrypt на мой сайт с CertBot, я получаю ERR_TOO_MANY_REDIRECTS
когда я пытаюсь посетить домен моего сайта.
немного информации:
-Май-сайт сборка с Django, Nginx и Gunicorn.
server {
server_name www.example.com example.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/myproject;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
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
listen 80;
server_name www.example.com example.com;
return 404; # managed by Certbot
}
/etc/letsencrypt/options-ssl-nginx.conf:-
# This file contains important security parameters. If you modify this file
# manually, Certbot will be unable to automatically provide future security
# updates. Instead, Certbot will print and log an error message with a path to
# the up-to-date file that you will need to refer to when manually updating
# this file.
ssl_session_cache shared:le_nginx_SSL:1m;
ssl_session_timeout 1440m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RS$
пожалуйста, скажите мне, если вам нужен любой другой код / информация спасибо
Примечание: я прочитал все вопросы с той же проблемой и до сих пор не могу понять, что не так
1 ответ
Если кто-то использует CloudFlare и имеет ту же проблему.
Это исправило: https://stackoverflow.com/a/60789055/3858492
В моем случае это был Cloudflare. Мне пришлось перейти на полное шифрование SSL
Это потому, что вы перенаправляете все соединения на https, даже соединения https, что означает создание цикла перенаправления.
Измените ваш конфиг на
server {
listen 80 default_server;
server_name www.example.com example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl default_server;
server_name www.example.com example.com;
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
location /favicon.ico {
access_log off;
log_not_found off;
}
location /static/ {
root /home/myproject;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
}
Хотя было бы хорошо узнать, что входит в ваш /etc/letsencrypt/options-ssl-nginx.conf.
Объяснение:
В основном вам нужны две секции "сервер", одна для порта 80 и одна для порта 443. Секция порта 80 (http) содержит только перенаправление, а секция 443 содержит фактические настройки для вашего сайта (местоположения, корни и т. Д.).) и настройки SSL (сертификаты, поддерживаемые протоколы, шифры и т. д.).
Поэтому, когда клиент подключается через http, сервер говорит ему вместо этого перейти к https, а затем часть https обрабатывает все оттуда.
Это также хорошая идея использовать отступы в ваших конфигах для лучшей читаемости и облегчения исправления ошибок.
Примечание. Конфиг, который я разместил, только исправил вашу проблему с перенаправлением, я не знаю, была ли действительная конфигурация, которая была у вас, действительна для вашего случая (Gunicorn и т. Д.) Обычно вы также должны определить индекс и корень для вашего сервера следующим образом:
root /home/website/mywebsite/public;
index index.html index.htm index.php;