nginx HTTPS WWW redireciona para não-WWW

7

Meu certificado SSL é para mydomain.com, então estou tentando redirecionar todo o site www.mydomain.com para www. Agora, todos esses trabalhos:

http://www.mydomain.com
http://mydomain.com
https://mydomain.com

mas o link está dando o aviso "Site não seguro" ao navegador ... Tentei configurar um redirecionamento como o abaixo, mas, por favor, me diga onde meu script está com bugs ...

     server {
        listen      80;
        server_name www.mydomain.com mydomain.com;
        rewrite     ^(.*)   https://mydomain.com$1 permanent;
        client_max_body_size 100M;
            location / {
                   index    index.htm index.html index.php;
            }

            location ~ \.php$ {
                    include fastcgi_params;
                    fastcgi_index index.php;
                    fastcgi_pass 127.0.0.1:9000;
                    fastcgi_param SCRIPT_FILENAME /var/www/mysite$fastcgi_script_name;
            }


    }



    server {
        listen               443;
        ssl                  on;
        ssl_certificate      /usr/local/nginx/conf/public.crt;
        ssl_certificate_key  /usr/local/nginx/conf/server.key;


        server_name www.mydomain.com;
        rewrite ^(.*) https://mydomain.com$1 permanent;

    }





    server {
        listen               443;
        ssl                  on;
        ssl_certificate      /usr/local/nginx/conf/public.crt;
        ssl_certificate_key  /usr/local/nginx/conf/server.key;
        client_max_body_size 100M;
        server_name mydomain.com;
        root /var/www/mysite;
        index index.php;

        location ~ \.php$ {
                    include fastcgi_params;
                    fastcgi_index index.php;
                    fastcgi_pass 127.0.0.1:9000;
                    fastcgi_param SCRIPT_FILENAME /var/www/mysite$fastcgi_script_name;
        }


    }
    
por James Gu 10.02.2012 / 02:45

3 respostas

14

Seu script de configuração não está com bugs.

Com sua configuração atual (supondo que você tenha um Certificado SSL de assunto único padrão instalado), isso não é uma opção .

A razão para isso é a maneira como as conexões https funcionam:

When a client (the browser), issues a https request to the server (nginx), it initiates an SSL session by way of an SSL handshake. When, and only when, the handshake succeeds and the session is established, the browser sends the actual HTTP request containing the hostname. Since SSL/TLS is not only a way to provide encryption for data connections, but also a way for the server to authenticate itself to the client. As part of the authentication process, the browser validates the identity of the server. One of the validation checks is to match the certificate subject name with the hostname that the browser intends to request content from. If this validation fails, the browser issues a warning to the user.

Como o processo de validação falha, o servidor nunca recebe a solicitação HTTP para www.mydomain.com no ouvinte da porta 443 e, portanto, não pode enviar uma resposta de redirecionamento para o cliente / navegador.

Para ativar o redirecionamento do link para o link , você tem algumas opções, mas tudo se resume a isso: você precisa de um certificado com um assunto para cada nome de host.

  1. Certificado SAN

    • Obtenha um Certificado UC / SAN e tenha www.mydomain.com adicionado como SAN (Nome alternativo do assunto)
    • O (s) assunto (s) agora corresponde a solicitações para mydomain.com e www.mydomain.com
  2. Múltiplos endereços IP

    • Obtenha outro endereço IP para o seu servidor.
    • Obter um certificado SSL com o nome do assunto www.mydomain.com
    • Configure o www.mydomain.com https server para escutar no novo endereço IP (ainda porta 443)
    • Configure o www.mydomain.com https server para usar o novo certificado
    • Atualize o registro A de www.mydomain.com para apontar para o novo endereço IP em sua zona DNS pública
  3. TLS SNI

    • Como no exemplo acima, obtenha um certificado SSL com o nome do assunto www.mydomain.com
    • Em vez de usar outro endereço IP, aproveite a extensão TLS do Indicação do nome do servidor .

Como o SNI tem suporte limitado a navegadores, evito a sugestão 3. Verifique a documentação do nginx no SNI se você gosta (parte inferior da página)

UPDATE : algumas autoridades de certificação oferecem certificados de assunto único com uma SAN adicional grátis para o prefixo www. .

    
por 10.02.2012 / 03:25
6

Você não pode evitar os avisos "site-not-safe" se seus domínios não corresponderem. Seu certificado deve ser válido para todos os domínios que você deseja veicular em HTTPS, incluindo os domínios somente redirecionados.

Se o seu certificado não for válido para "www.example.com", sendo válido apenas para "example.com", você não poderá redirecionar de link para o link sem um aviso de segurança.

    
por 10.02.2012 / 03:06
3

Você pode tentar isso:

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

Caso contrário, você pode obter um certificado curinga, que abrangerá todos os domínios de terceiro nível.

    
por 21.11.2012 / 01:49

Tags