Nginx: redireciona o site HTTPS para www HTTPS, precisa de certificado?

3

Eu tenho um certificado para example.com e www.example.com e a seguinte configuração:

server {
    listen              443 ssl;
    listen              [::]:443 ssl;
    server_name         example.com;
    return              301 https://www.example.com$request_uri;
}

Estou tentando redirecionar para www.example.com e funciona quando visito https://example.com . Eu sou redirecionado com sucesso. Mas eu não entendo porque isso funciona. O redirecionamento 301 deve estar acontecendo por SSL, mas eu não especifiquei o certificado. Como isso funcionaria?

Além disso, qual seria a maneira recomendada de fazer isso? É só adicionar o certificado no bloco acima?

    
por Gradient 28.07.2017 / 21:28

1 resposta

4

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;
}
    
por 28.07.2017 / 21:35

Tags