Sim, você precisa de um certificado para o site https: // para redirecionar para o site link . Em geral, a maneira mais fácil é obter um certificado que abranja tanto o www como o non-www e use isso em ambas as configurações do servidor. Vamos criptografar isso não é problema.
Por que sua configuração funciona?
Não tenho ideia de por que sua configuração acima funciona, sem certificado especificado. Tanto quanto eu sei, não deveria.
Eu coloquei sua configuração na minha instância do Nginx na AWS, ligeiramente ajustada da seguinte maneira
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name example2.com;
return 301 https://www.example2.com$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name www.example2.com;
root /var/www/folder;
}
Adicionei o seguinte ao meu / etc / hosts
11.0.1.10 example2.com www.example2.com
Quando fiz um wget, é isso que consegui
wget https://www.example2.com
--2017-07-29 08:07:17-- https://www.example2.com/
Resolving www.example2.com (www.example2.com)... 11.0.1.10
Connecting to www.example2.com (www.example2.com)|11.0.1.10|:443... connected.
Unable to establish SSL connection.
Você pode ver que ele pode se conectar ao servidor, mas não pode estabelecer uma conexão SSL. Quando uso o curl, recebo uma resposta diferente, mas não funciona.
curl https://www.example2.com
curl: (35) Encountered end of file
Com base nisso, acho que está faltando algo do que você nos disse.
Veja como deve ser
Isso mostra como o Nginx deve ser configurado.
# Main website, https www
server {
server_name www.example.com;
listen 443 ssl http2; # http2 is optional
ssl_certificate /path/to/fullchain;
ssl_certificate_key /path/to/privkey;
# locations etc
}
# forward https non-www to www
server {
server_name example.com;
listen 443 ssl;
ssl_certificate /path/to/fullchain;
ssl_certificate_key /path/to/privkey;
return 301 https://www.example.com$request_uri;
}
# Forward http to https
server {
listen 80;
server_name example.com www.example.com;
access_log /var/log/nginx/access.log main buffer=128k flush=1m if=$log_ua;
return 301 https://example.com$request_uri;
}