#http #nginx #ssl #https #reverse-proxy
#http #nginx #ssl #https #обратный прокси
Вопрос:
У меня есть служба, которая получает запросы с внешнего адреса, например https://example.com , и внутренний адрес, например localhost: 8080.
Я должен сделать так, чтобы все запросы, направленные на эту службу, отображались так, как если бы они были направлены на одно и то же имя хоста.
Мой первоначальный план состоял в настройке обратного прокси-сервера NGINX, который обменивается localhost
example.com
данными при обращении по адресу localhost:8081.
map $http_host $served_host {
default $http_host;
localhost:8081 example.com;
}
server {
listen 8081;
listen [::]:8081;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $served_host;
}
}
Это почти работает, но схема по-прежнему неверна. Извне запросы направляются на https://example.com , в то время как из частной сети (localhost: 8081) они теперь направляются на http://example.com .
Как я могу изменить https -> http или http -> https? Либо все в порядке, мне просто нужен точно такой же адрес.
Ответ №1:
Я понял это сам, на случай, если кто-то наткнется на этот вопрос:
В исходном запросе X-Forwarded-Proto
заголовок был добавлен со значением https
. Служба использовала это для восстановления исходного адреса, в том числе https://
. В то время как у внутреннего не было этого заголовка. Итак, просто добавив
proxy_set_header X-Forwarded-Proto https;
для прокси-сервера внутренний запрос отображается так, как он тоже использует схему https
. Я не уверен, что это оптимальное решение, но оно работает 🙂