Назад | Перейти на главную страницу

перенаправление 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, браузерные снимки и т. д. правильно обнаруживают перенаправление 301 «Перемещено навсегда». Однако большинство браузеров сохраняют URL-адрес www. Очень неприятно. Firefox и Opera были установлены с нуля, поэтому в истории домена www нет.

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

Вы не видите перенаправления (а есть 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;
}