Linux Labs

Веб-стек / Ступень 5 из 9

HTTPS в nginx: цепочка и редирект

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 4 из 7 · на машине · 4 мин

Старый адрес по HTTP

Сайт открывается по HTTPS, но старый адрес http:// по-прежнему отдаёт страницу.

bash
curl -I http://app.lab.test/

curl -I печатает только заголовки ответа: 200 OK — страница ушла по сети открытым текстом. Блок server на порту 80 отдаёт её, как и раньше.

Такой server оставляют для перенаправления: на любой запрос он отвечает кодом 301 и заголовком Location — куда идти. Браузер и curl -L повторяют запрос по новому адресу сами.

nginx
server {
    listen 80;
    server_name app.lab.test;
    return 301 https://$host$request_uri;
}

return отвечает клиенту сразу, файлы из root не ищет. $host — имя сайта из запроса, $request_uri — путь вместе с параметрами после ?. Так http://app.lab.test/cart?id=7 уйдёт ровно на https://app.lab.test/cart?id=7.

Проверь себя 1 вопрос

В server на 80 написано return 301 https://$host;. Куда nginx отправит запрос http://app.lab.test/cart?id=7?

  • return отвечает сразу, файлы из root не ищет: код 301 и Location: https://app.lab.test.

  • Путь с параметрами подставляет $request_uri, а его в строке нет. curl -I покажет Location: https://app.lab.test.

  • return 301 отправляет на адрес, записанный после кода, а он начинается с https://.

$host подставляет только имя сайта, путь и параметры — $request_uri. Без него любой старый адрес уводит на главную, и ссылки на страницы сайта ломаются.

Главное в шаге

  • Server на 80 с return 301 https://$host$request_uri; уводит любой запрос на HTTPS с тем же путём.
  • Код 301 и заголовок Location видно в curl -I, а curl -L переходит по нему сам.
Ubuntu 24.04
Загрузка…