Редирект nginx, который принудительно обновляет URL в браузере

У меня есть очень простая настройка nginx, которая перенаправляет www.example.com в example.com, следуя лучшей практике. Это работает, и в браузере Tor Firefox сайт http://www.idorecall.com/blog действительно обновляет URL-адрес в адресной строке до http://idorecall.com/blog.

Но это не меняет URL в адресной строке Chrome, Firefox Portable, IE и Opera Portable.

Вот модифицированный default Конфигурация nginx Других конфигурационных файлов nginx, кроме 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, http://www.rexswain.com/httpview.html, Browserhots и т. д. правильно определяют перенаправление 301 "Перемещено навсегда". Большинство браузеров сохраняют URL-адрес www. Супер расстраивает. Firefox и Opera были установлены с нуля, поэтому история попаданий в домен www отсутствует.

GitHub удается перенаправить http(s)://www.github.com на https://github.com/ в каждом браузере. Как они это делают?

1 ответ

Решение

Вы не видите редирект (а krisFR есть), потому что у вас есть IPv6 (а он нет) и ваш nginx server Блок, содержащий перенаправление, используется только для соединений IPv4.

Когда server блок опускает listen директива, по умолчанию listen *:80, который прослушивает только все адреса IPv4 (и эквивалентно listen 80). Таким образом, это server Блок никогда не будет использоваться для подключений IPv6, которые попадают к вашему определенному default_server,

Чтобы решить проблему, добавьте соответствующий listen директивы для прослушивания как на IPv4, так и на IPv6.

server {
  listen 80;
  listen [::]:80;
  server_name www.idorecall.com;
  return 301 $scheme://idorecall.com$request_uri;
}
Другие вопросы по тегам