
Estaba intentando proteger Nginx con Let's Encrypt en Ubuntu 16.04.
archivo ejemplo.confantesobtener un certificado 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://ejemplo.com/esfuncionando bien.
Intento obtener un certificado SSL mediante
sudo certbot --nginx -d example.com -d www.example.com
el resultado fue
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
archivo ejemplo.confdespuésobtener un certificado 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://ejemplo.com/está redirigiendo a https://ejemplo.com/demasiadas veces
example.com redirected you too many times.
ERR_TOO_MANY_REDIRECTS
¿Por qué redirige demasiadas veces?
¿Cuál es el propósito del segundo bloque de servidor?
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 }
Cómo hacer todas las redirecciones ahttps://www.ejemplo.com/?
EDITAR1
Mover el código administrado de certibot al segundo bloque del servidor detuvo el problema de demasiadas redirecciones. Pero mi sitio web ha vuelto a dirigirse aHTTPen lugar de 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
}
Respuesta1
¿Cuál es el propósito del segundo bloque de servidor?
Para escuchar en HTTP y redirigir solicitudes HTTP a HTTPS.
¿Por qué redirige demasiadas veces?
No debería,a menos queAl sitio web en sí no le gusta que lo llamen usando HTTPS y realiza alguna redirección nuevamente. La configuración de Nginx parece estar bien.
How to make all redirects to https://www.example.com/?
Cambiar
if ($host = example.com) {
return 301 https://$host$request_uri;
}
a
if ($host = example.com) {
return 301 https://www.$host$request_uri;
}
También puedes agregar otra redirección desdehttps://ejemplo.comahttps://www.ejemplo.com(en el primer bloque del servidor, el que escucha en HTTPS); esto se encargará de redirigir las solicitudes HTTPS sin "www". al principio.
Respuesta2
1. ¿Por qué se redirige demasiadas veces?
Su aplicación no sabe si la solicitud llegó a través de SSL o no, agregar la siguiente línea al bloque de su servidor debería solucionarlo:
passenger_set_header X-Forwarded-Proto $scheme;