“Remover a seguinte cadeia de redirecionamento, se possível” no Nginx

3

Eu executei o teste Pingdom no meu site de arquivos HTML simples e recebi classificação F para isso:

Remova a seguinte cadeia de redirecionamento, se possível:

http://example.com/
http://www.example.com/
https://www.example.com/

E o único redirecionamento no meu arquivo .conf que eu tenho é:

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

O próximo bloco é SSL e o restante.

server {
  listen 443 ssl http2;
  etc...
}

Não há outras configurações. Tudo o que preciso é redirecionar o não-www para o www e sempre apenas https e passar no teste.

Atualizado: Full .conf

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

server {
  listen 443 ssl http2;

  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 'EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5';
  ssl_dhparam /etc/nginx/ssl/dhparams.pem;
  ssl_session_timeout 1d;
  ssl_session_cache shared:SSL:50m;
  ssl_stapling on;
  ssl_stapling_verify on;
  add_header Strict-Transport-Security max-age=15768000;

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

  server_name example.com www.example.com;

  location / {
    autoindex on;
    try_files $uri $uri/ =404;
  }

  location ~* /img/.*\.gif$ {
    expires 30d;
    add_header Pragma public;
    add_header Cache-Control "public";
  }
}
    
por user3108268 20.02.2017 / 00:48

2 respostas

0

Apenas altere $scheme para https , não sei dizer por que isso está lá, já que é improvável que você consiga algo diferente de http na porta 80, a menos que seus usuários estejam fazendo algo estranho.

EDIT: Adicione redirecionamento https- > https em falta.

Não notou que você não tem um default_server explícito. Vá com algo nos moldes de:

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

A resposta de Ashish pode funcionar, mas eu ficaria longe de if o máximo possível (leia Se é mal ).

    
por 20.02.2017 / 08:23
-1

Eu acho que seu godaddy cname ou A será bom para o nginx tente o código abaixo.

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    if ($http_x_forwarded_proto != 'https') {
          rewrite ^(.*) https://www.example.com$1 redirect;
    }
}

Se você quiser fazer isso de uma só vez, use esse caminho, mas é uma maneira muito ruim de resolver esse problema. Adicione o módulo de mapa no topo do bloco de configuração e localização no bloco do servidor 80.

map $http_host $new {
    'www.abc.com' '1';
}

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    if ($http_x_forwarded_proto != 'https') {
        rewrite ^(.*) https://$host$1 redirect;
    }
    location / {
        if ($new != '1') {
            rewrite ^(.*) https://www.example.com$1 redirect;
        }
    }
}
    
por 20.02.2017 / 10:20