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
Mengapa terlalu sering dialihkan?
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
}
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
}
какова цель второго блока сервера?
Для прослушивания 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. Почему перенаправляется слишком много раз?
Ваше приложение не знает, поступил ли запрос через SSL или нет, добавление следующей строки в блок сервера должно исправить это:
пассажиру_set_header X-Forwarded-Proto $ scheme ;