Nginx & Redirecionamento Https

1

Eu tenho um certificado ssl para www.domain.com. Obviamente, se alguém acessar https: //domain.com, ele receberá um erro do navegador sobre uma incompatibilidade de certificado. É possível configurar o servidor web para redirecionar solicitações de https: // domain.com para https: // www.domain.com?

No nginx, tentei variações disso, mas sem sucesso:

server {
  listen   443;
  server_name www.domain.com domain.com;
  if ($host !~ www.domain.com) {
    rewrite ^/(.*) https://www.domain.com/$1 permanent;
  }
}

Edit: Só para esclarecer se alguém acessa o site via http simples, não é um problema, eu já posso redirecioná-los para https: // www.dominio.com, o que é correto. É somente se eles digitarem manualmente https: // domain.com, que eu não sei como fazer o redirecionamento.

    
por AJ01 11.04.2011 / 06:01

3 respostas

2

Infelizmente, uma resposta de redirecionamento só pode ocorrer após a sessão SSL ter sido estabelecida.

Isso é claramente um problema de certificado; você precisa de um certificado que contenha www.domain.com com domain.com como SAN (Subject Alternative Name). A maioria das CAs oferece uma única SAN gratuitamente, por exemplo, digicert.

    
por 12.09.2013 / 11:41
0
server {
 listen 443;
 servername www.domain.com domain.com;

 if ($host ~ ^(?!www)) {
        rewrite ^/(.*)$ http://www.$host/$1 permanent;
    }
}

segundo pensei que seria melhor usar dois blocos de servidor:

server {
    listen 443;
    server_name  domain.com;
    rewrite ^(.*) http://www.example.com$1 permanent;
}

server {
    listen 443; 
    server_name  www.domain.com;
    hosting configuration here
}

EDIT: Que tal adicionar domain.com como SubjectAltName no seu certificado SSL para que você não precise reescrevê-lo. Talvez pergunte ao seu CA se isso é possível?

Na pior das hipóteses, envie o $$ para um certificado para domain.com: D

    
por 11.04.2011 / 06:13
0

Eu uso isso para levar os usuários a um serviço https:

server {
  listen 80;
  server_name mail.polemon.org;
  rewrite ^(.*)$ https://mail.polemon.org$1 permanent;
}

e esta é uma regra geral:

server {
  listen 80;
  server_name polemon.org *.polemon.org;

  if ($host != polemon.org) {
    rewrite ^(.*)$ http://polemon.org$1 permanent;
  }
}

O pega-tudo deve ser definido por último, caso contrário, outros subdomínios não funcionarão.

E aqui está outro exemplo, como lidar com pessoas que não têm linha de cabeçalho Host: :

server {
  listen 80 default;
  server_name _;
  server_name_in_redirect off;

  root /var/www/jail/;
  index index.html;
}

Como nota lateral, você pode criar certificados para nomes DNS com caracteres curinga. Esses são chamados de "certificados wild" e, mesmo que sejam válidos, os usuários do Firefox ainda recebem avisos.

    
por 11.04.2011 / 07:04

Tags