
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
Warum erfolgt eine so häufige Weiterleitung?
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 }
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;