Схема изменения NGINX proxy_pass

#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 . Я не уверен, что это оптимальное решение, но оно работает 🙂