Nginx não-www redirecionar para www com SSL não funciona

1

Eu tenho trabalhado com isso por horas e ainda não consigo ver qual é o problema com a minha configuração. Gentilmente veja abaixo.

/ etc / nginx / sites-enabled / default

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://www.example.com$request_uri;
}


server {
    listen 443 ssl;
    server_name example.com www.example.com;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    ssl_ciphers 'ECDHE-RSA-AES128...;

    location / {
        include    uwsgi_params;
        uwsgi_pass    unix:/my_socket/site.sock;
    }    

    location /static/ {
        alias /my_static/location/;
    }

    location /media  {
        alias /my_media/location/;
    }



    location ~ /.well-known{
        allow all;
    }
    return 301 https://www.example.com$request_uri;
}

Quando tento acessar example.com , www.example.com , ele é redirecionado para link (que é o que eu quero), mas a página não está funcionando a menos que eu remova o último código de linha abaixo.

return 301 https://www.example.com$request_uri;

Depois de remover a linha acima, todos os links estão funcionando bem, mas não estão redirecionando para www .

Máquina:

  • Ubuntu 14.04
  • nginx / 1.4.6 (Ubuntu) com o uWSGI
  • DJango 1.8.4 em execução no Google Cloud Platform (Compute Engine)
por aldesabido 11.10.2016 / 14:47

2 respostas

2

Assim como um resumo, a maneira correta de configurar esses redirecionamentos é:

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://www.example.com$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    ssl_ciphers 'ECDHE-RSA-AES128...;

    return 301 https://www.example.com$request_uri;
}

server {
    listen 443 ssl;
    server_name www.example.com;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ... rules for the actual website ...
}

Então, temos um bloco de servidor para http para os domínios example.com e www.example.com fazendo os redirecionamentos.

Em seguida, temos um bloco de servidor para https para o domínio example.com fazendo o redirecionamento.

Em seguida, temos o bloco de servidor para https do domínio www.example.com , que contém a configuração do site real.

    
por 11.10.2016 / 20:59
0

Como foi mencionado no comentário, você deve adicionar conteúdo ao seu bloco de 443.

Por exemplo, você deve adicionar upstream e encaminhar todas as solicitações para lá.

    
por 11.10.2016 / 15:40

Tags