
Eu estava tentando proteger o Nginx com Let's Encrypt no Ubuntu 16.04.
arquivo exemplo.confantesobtenção de um 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://exemplo.com/étrabalhando bem.
Tento obter um certificado SSL por
sudo certbot --nginx -d example.com -d www.example.com
o resultado foi
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
arquivo exemplo.confdepoisobtenção de um 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://exemplo.com/está redirecionando para https://exemplo.com/muitas vezes
example.com redirected you too many times.
ERR_TOO_MANY_REDIRECTS
Por que está redirecionando muitas vezes?
qual é o propósito do segundo bloco 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 }
Como fazer todos os redirecionamentos parahttps://www.example.com/?
EDITAR1
Mover o código gerenciado do certibot para o segundo bloco do servidor interrompeu o problema de muitos redirecionamentos. Mas meu site está de volta direcionando paraHTTPem vez 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
}
Responder1
qual é o propósito do segundo bloco de servidor?
Para ouvir HTTP e redirecionar solicitações HTTP para HTTPS.
Por que está redirecionando muitas vezes?
Não deveria,a menos queo próprio site não gosta de ser chamado usando HTTPS e executa algum redirecionamento novamente. A configuração do Nginx parece estar bem.
How to make all redirects to https://www.example.com/?
Mudar
if ($host = example.com) {
return 301 https://$host$request_uri;
}
para
if ($host = example.com) {
return 301 https://www.$host$request_uri;
}
Você também pode adicionar outro redirecionamento dehttps://example.comparahttps://www.exemplo.com(no primeiro bloco do servidor, aquele que escuta em HTTPS); isso cuidará do redirecionamento de solicitações HTTPS sem “www”. no inicio.
Responder2
1. Por que ele está redirecionando muitas vezes?
Seu aplicativo não sabe se a solicitação veio por SSL ou não. Adicionar a seguinte linha ao bloco do servidor deve corrigir o problema:
passenger_set_header X-Forwarded-Proto $scheme;