nginx redirecionamento que força a atualização de URL no navegador

2

Eu tenho uma configuração nginx muito básica que redireciona www.example.com para example.com , seguindo o melhores práticas . Funciona e, no navegador Tor Firefox, acessar o link realmente atualiza o URL na barra de endereços para link .

Mas isso não altera o URL na barra de endereços do Chrome, Firefox Portable, IE e Opera Portable.

Aqui está a configuração default nginx modificada. Não há outros arquivos de configuração do nginx além do nginx.conf.

server {
  server_name www.idorecall.com;
  return 301 $scheme://idorecall.com$request_uri;
}

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;

    index index.html index.htm index.nginx-debian.html;

    server_name idorecall.com;

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

    location /blog {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header HOST $http_host;

        proxy_pass http://127.0.0.1:2368;
    }
}

wget -S , link , browsershots etc. detectam corretamente o redirecionamento 301 "Movido permanentemente". A maioria dos navegadores preserva o URL www. Super frustrante. O Firefox e o Opera foram instalados a partir do zero, então não há nenhum hit no histórico do domínio www.

O GitHub consegue redirecionar http (s): //www.github.com para o link em todos os navegadores. Como eles fazem isso?

    
por Dan Dascalescu 10.05.2015 / 20:18

1 resposta

3

Você não está vendo o redirecionamento (e o krisFR) porque você tem o IPv6 (e ele não) e o bloco nginx server que contém o redirecionamento está sendo usado apenas para conexões IPv4.

Quando um bloco server omite a a diretiva listen , o padrão é listen *:80 , que escuta apenas em todos Endereços IPv4 (e é equivalente a listen 80 ). Portanto, esse bloco server nunca será usado para conexões IPv6, que passam para o seu default_server definido.

Para resolver o problema, adicione as diretivas listen apropriadas para escutar no IPv4 e no IPv6.

server {
  listen 80;
  listen [::]:80;
  server_name www.idorecall.com;
  return 301 $scheme://idorecall.com$request_uri;
}
    
por 10.05.2015 / 20:50