Практическое задание

Эта задача — шаг 13 курса «Новый сервер: настройка с нуля»

Весь HTTP магазина — на HTTPS

средне~10 мин

HTTPS у магазина уже работает на 443, а порт 80 пока никто не слушает — старые ссылки вида http://…/catalog/?page=2 ведут в никуда. Настрой nginx так, чтобы порт 80 отвечал 301 на тот же адрес по https://, сохраняя хост, путь и параметры запроса.

Что потренируешь:
  • nginx
  • return 301
  • $host
  • $request_uri
  • https

Разбор темы

«Принудительный HTTPS» — стандартный приём: порт 80 ничего не отдаёт по существу, а отвечает 301 Moved Permanently с заголовком Location, где тот же адрес, но со схемой https://. Чтобы старые ссылки и закладки не терялись, редирект должен сохранять хост, путь и строку запроса. В nginx каждый слушающий порт — свой блок server, поэтому рабочий блок на 443 не трогают, а рядом добавляют маленький блок на 80 с return. Целевой адрес собирают из встроенных переменных — так один редирект работает для любого хоста и пути.

Что проверяется

  1. порт 80 отвечает 301
  2. редирект сохраняет хост, путь и параметры
  3. HTTPS по-прежнему отдаёт сайт

Как это выглядит