NGINX HTTP / NON-WWW para HTTPS causou muitos redirecionamentos

1

Eu quero redirecionar 301 todos os não-https e não-www para https://www.example.com usando a seguinte configuração que encontrei em outro thread como a resposta aceita. Mas não está funcionando para mim.

O que funciona:

  • https://example.com - > https://www.example.com

  • http://example.com - > https://www.example.com

MAS ...

  • http://www.example.com - > MUITOS REDIRECTOS ... usando o curl, vejo que isso sempre redireciona para si mesmo ...

Aqui está meu nginx.conf :

server {

    # ports
    listen 80;
    listen [::]:80;

    # domain name
    server_name example.com www.example.com;

    # Redirect all non-https requests
    rewrite ^ https://www.example.com$request_uri? permanent;
}

server {

    if ($bad_referer) {
        return 444;
    }

    if ($bad_bot) {
        return 444;
    }

    # ports
    listen [::]:443 ssl http2;
    listen 443 ssl http2;

    # domain name
    server_name example.com www.example.com;

    if ($host = 'example.com') {
      return 301 https://www.example.com$request_uri;
    }

    # ssl certificate files
    ssl_certificate /etc/ssl/certs/domain.crt;
    ssl_certificate_key /etc/ssl/private/domain.key;

    include basic.conf;
}

Alguma idéia?

Atualização : Está ficando ainda mais estranho ... Eu tentei criar uma regra geral para rotear tudo para ssl (como sugerido em muitos blogs) ... agora www, bem como não versão www estão redirecionando de volta para si mesmo ...

server {

    listen 80 default_server;
    listen [::]:80 default_server;

    server_name _;

    return 301 https://$host$request_uri;
}

Eu não tenho idéia de como depurar isso ... btw ... isso é um cluster de enxame docker ... se isso ajuda ...

    
por Lars Dittrich 14.11.2018 / 15:38

1 resposta

1

Depois de testar isso eu mesmo, tive que editar minha resposta original porque isso levou a um erro conflicting server name .

Infelizmente, não posso dizer por que você ainda recebe esse loop de redirecionamento - talvez o erro venha do seu include. Mas posso apresentar uma configuração funcional (testada) que realiza o que você estava pedindo:

Geralmente: Para um redirecionamento simples, é recomendável usar a diretiva return em vez de redirect ( link )

Objetivo: Seja qual for a combinação

  • do esquema ( http ou https )
  • e domínio ( example.com ou www.example.com )

você digita no navegador, você será redirecionado para https://www.example.com

Aqui está a configuração:

server {

listen 80;

server_name www.example.com redirecttest.de;

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

}

server {

listen 443 ssl http2;

server_name www.example.com;

root /var/www/example.com/http;

ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;

}
    
por 14.11.2018 / 22:49