
Я пытался защитить Nginx с помощью Let's Encrypt на Ubuntu 16.04.
файл example.confдополучение 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/являетсяработает отлично.
Я пытаюсь получить SSL-сертификат
sudo certbot --nginx -d example.com -d www.example.com
результат был
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
файл example.confпослеполучение 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/перенаправляет на https://example.com/слишком много раз
example.com redirected you too many times.
ERR_TOO_MANY_REDIRECTS
Почему происходит слишком много перенаправлений?
какова цель второго серверного блока?
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 }
Как сделать все перенаправления наhttps://www.example.com/?
ИЗМЕНИТЬ1
Перемещение управляемого кода certibot во второй блок сервера остановило проблему слишком большого количества перенаправлений. Но мой веб-сайт снова перенаправляет наHTTPвместо 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
}
решение1
какова цель второго серверного блока?
Для прослушивания 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.» в начале.
решение2
1. Почему происходит слишком много перенаправлений?
Ваше приложение не знает, был ли запрос отправлен через SSL или нет. Добавление следующей строки в блок сервера должно исправить это:
passenger_set_header X-Forwarded-Proto $scheme;