У меня есть сервер nginx с включенным SSL. Поскольку он работает на другом порту (чем 443), иногда он получает простые HTTP-запросы вместо HTTPS. Я бы хотел настроить перенаправление для автоматической замены схемы, я пробовал этот код:
error_page 497 https://$host:$server_port$request_uri;
Но проблема здесь в том, что, поскольку сервер работает в виртуальной машине, и порт перенаправляется на другой порт, он перенаправляется на недопустимый порт (с которого сервер получил запрос).
Мой вопрос: как я могу проанализировать / получить порт из запроса, а не порт с сервера, получившего запрос?
Надеюсь, не слишком поздно (восемь месяцев!). У меня сам был аналогичный вопрос, чтобы использовать исходный порт запроса в nginx.conf.
nginx $ http_название переменная
$ http_name: произвольное поле заголовка запроса; последняя часть имени переменной - это имя поля, преобразованное в нижний регистр с заменой дефисов на символы подчеркивания
$http_host
поэтому должен содержать заголовок запроса Host, если это помогает.
например локальный: 8020
Этот вопрос в значительной степени дублирует этот:
Как перенаправить запросы, отличные от HTTP, с порта 80 на другой порт?
Там они получают запросы, отличные от HTTP, на порт 80, вы получаете запросы без HTTPS на альтернативном порту 443. В остальном идея та же.
Модули Nginx существуют, чтобы делать больше с TCP-пакетами: