>_ IzzyLab

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

Редирект HTTP на HTTPS

средне

TLS уже настроен: nginx отдаёт HTTPS на 443 (сертификат самоподписанный). Теперь заставь nginx на порту 80 отвечать всем редиректом 301 на https:// того же адреса — чтобы никто не ходил по голому HTTP.

Что потренируешь:
  • nginx
  • редирект 301
  • return
  • server-блок
  • https

Разбор темы

Классический паттерн «принудительный HTTPS»: голый HTTP на порту 80 не должен ничего отдавать по существу — он лишь отвечает браузеру «то же самое, но по https». Технически это статус 301 Moved Permanently с заголовком Location, указывающим целевой адрес. В nginx каждый слушающий порт — отдельный блок server { ... }, поэтому рабочий HTTPS-блок на 443 трогать не нужно: рядом добавляется отдельный блок на 80-м порту. Чтобы редирект работал для любого хоста и пути, а не одного захардкоженного домена, целевой URL собирают из встроенных переменных nginx (запрошенный хост и исходный URI). После правки конфиг проверяют nginx -t и перезагружают.

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

  1. порт 80 отвечает редиректом 301
  2. заголовок Location ведёт на https://
  3. HTTPS по-прежнему отдаёт страницу

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