Сайт открывается по HTTPS, но старый адрес http:// по-прежнему отдаёт страницу.
curl -I печатает только заголовки ответа: 200 OK — страница ушла по сети открытым текстом. Блок server на порту 80 отдаёт её, как и раньше.
Такой server оставляют для перенаправления: на любой запрос он отвечает кодом 301 и заголовком Location — куда идти. Браузер и curl -L повторяют запрос по новому адресу сами.
return отвечает клиенту сразу, файлы из root не ищет. $host — имя сайта из запроса, $request_uri — путь вместе с параметрами после ?. Так http://app.lab.test/cart?id=7 уйдёт ровно на https://app.lab.test/cart?id=7.
В 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переходит по нему сам.