Является ли настройка заголовка X-Forwarded-Host (API выборки) хорошим способом, позволяющим моему обратному прокси-серверу пересылать запросы соответствующим службам? - PullRequest
0 голосов
/ 19 декабря 2018

Мой вопрос в основном расширенный до Можете ли вы установить заголовок Host с помощью API выборки

У меня та же проблема, что моему обратному прокси-серверу (nginx) необходимо перенаправить запросысоответствующие услуги.Изначально я не знал, что Host - это запрещенное имя заголовка, поэтому после прочтения его объяснения https://tools.ietf.org/html/rfc7230#page-44 я подумал, что могу просто установить для него разные значения в моем запросе на выборку, чтобы позволить моему обратному прокси-серверу дифференцировать запросы и пересылатьв соответствующий сервис.

Теперь, после Google, я думаю, что X-Forwarded-Host может сделать эту работу, но я не могу найти достаточно материала для этого.

Мой второй вопрос: если хост не может быть изменен программно, кто изменяет / устанавливает его значение, чтобы сделать его полезным?

Кстати, мой запрос на выборку прост,

let response = await fetch(url, // The reverse proxy server address
{
  headers: {
    'X-Forwarded-Host' : "..."
  }
});

1 Ответ

0 голосов
/ 19 декабря 2018

Мой второй вопрос: если хост не может быть изменен программно, кто изменил / установил его значение, чтобы сделать его полезным?

Сначала я собираюсь обратиться к этому, потому что я думаю,фон важен для ответа на остальную часть вопроса.

Заголовок Host получен из URL.Дано:

fetch("http://www.example.com/foo/bar")

… заголовок хоста будет www.example.com.Это так же, как любой другой HTTP-запрос.например, <img src="http://www.example.com/foo.png"> вызовет запрос с помощью Host: www.example.com.

Аналогично, путь (GET /foo/bar HTTP/1.1 и схема (как клиент подключается к серверу в первую очередь)) также получаются из URL.


Я думал, что могу просто установить для него разные значения в своем запросе на выборку, чтобы мой обратный прокси-сервер дифференцировал запросы и переадресовал на соответствующую службу.

Похоже, вы неправильно понимаете, как работает обратный прокси.

Клиент не делает запрос к обратному прокси-серверу и просит дать вам произвольный URL (так работает прямой прокси-сервер).

Вместо этого человек, управляющий веб-сайтом, настраивает требуемый URL-адрес, чтобы он указывал на обратный прокси-сервер, а затем настраивает обратный прокси-сервер для перенаправления запросов.

Например, вы можете настроить общедоступный доступDNS для указания www.example.com на сторону обратного прокси-сервера с выходом в Интернет, а затем настройте обратный прокси-сервер для ответа на запросы для https://www.example.com/foo/bar, выполнив запросТо есть http://private.on.my.lan:8012/myservice/foo/bar.

Тогда fetch просто запросит https://www.example.com/foo/bar, а все остальное будет прозрачно обработано обратным прокси-сервером.


Изменение запросов просто выполняется с помощьюразные URL и, возможно, разные имена хостов.

 https://www.example.com/foo/bar
 https://www.example.com/baz
 https://www.example.net/quack
 https://www.example.info/foo/bar

… могут указывать на один и тот же обратный прокси-сервер, который может иметь логику для их обработки по-разному.

...