Номер порта, устанавливаемый IIS в заголовке x-Forwarded-For, отличается от первоначально заданного порта.

У меня есть обратный прокси-сервер IIS, настроенный на моем устройстве для разработки, чтобы проверить, как мое приложение обрабатывает запросы, прошедшие разгрузку SSL.
Моему приложению необходимо воссоздать исходный запрос, добавить некоторые параметры строки запроса и отправить его обратно клиенту. По умолчанию IIS / ARR / URL-rewrite не добавляет стандартные заголовки «X-Forwarded-Host» и «X-Forwarded-Proto». Вместо этого самые близкие вещи, которые я могу найти, - это «X-ARR-SSL» и «X-Forwarded-For».
Я счастлив разобрать исходный IP-адрес из "X-Forwarded-For", но когда я смотрю на порт, это не имеет никакого смысла. Мой обратный прокси-сервер SSL настроен на прослушивание порта SSL по умолчанию (443), но в заголовке указан порт 52585.
Мой вопрос: знает ли кто-нибудь, как определить целевой порт исходного запроса является? Я хочу, чтобы мое приложение могло надежно обрабатывать запросы, проксируемые IIS, но похоже, что мне придется угадывать порт в зависимости от того, является ли запрос HTTP или HTTPS.


person nashyura    schedule 19.03.2015    source источник


Ответы (1)


X-Forwarded-For не имеет ничего общего с сервером. Это IP-адрес клиента. Он добавляется к заголовкам запроса, чтобы веб-сервер мог идентифицировать настоящего клиента, а не обратный прокси. Другие упомянутые вами заголовки были стандартами де-факто, которые теперь заменены RFC 7239. Согласно RFC, номер порта будет включен в раздел хоста заголовка Forwarded следующим образом:

Forwarded: for=192.0.2.60;proto=http;host=example.com:888;by=203.0.113.43

Я подозреваю, что некоторые обратные прокси-серверы добавляют номер порта как часть заголовка X-Forwarded-Host после двоеточия, как если бы он был в заголовке Host, но поскольку это не определенный стандартный заголовок, вы просто нужно попробовать это с вашим обратным прокси, чтобы увидеть.

См. Также: Что такое полная спецификация X -Forwarded-Proto HTTP-заголовок?

person James    schedule 19.03.2015
comment
Меня интересует клиент . Я видел ссылку, которую вы цитируете в своем ответе, но я пытаюсь заставить свое приложение работать с тем, что есть сейчас. У меня установлен IIS 7 с ARR 2.5, и в настоящее время он, похоже, не предоставляет заголовок Forwarded по умолчанию при работе в качестве прокси. - person nashyura; 20.03.2015
comment
Какой порт вы ожидаете, и что, по вашему мнению, вы могли бы с ним делать, кроме его записи? Это будет динамический высокий порт, и он будет подключен к IIS, поэтому вы не сможете на него ничего отправлять. Похоже, вы не совсем понимаете, как работают порты. В большинстве случаев сервер прослушивает фиксированный порт (например, 80 или 443), а клиент подключается к этому порту, используя динамический высокий порт. Номера портов редко совпадают с обеих сторон. - person James; 20.03.2015
comment
Ожидается 80 или 443 (порт сервера, к которому клиент делает запросы). Причина: мое приложение пытается отправить URL-адрес, который ссылается на мое приложение, и я отправляю этот URL-адрес клиенту, который находится на противоположной стороне обратного прокси. Таким образом, запрос GET для моего приложения, например https://site/myapp.aspx, может прийти в мое приложение со строкой URL-адреса, имеющей вид svrBehindFirewall: 45 / myapp .aspx. Если я хочу отправить обратно URL-адрес, который ссылается на мой сайт, мне нужно будет знать, каков был исходный протокол (https), исходное имя сервера и каков был исходный целевой порт (вероятно, 443). - person nashyura; 20.03.2015
comment
Если я отправлю клиенту URL-адрес типа http://serverBehindFirewall:95/myapp.aspx?page=2, то запрос этого URL-адреса клиентом никогда не достигнет моего приложения. - person nashyura; 20.03.2015
comment
PS. Я хорошо понимаю, как работают порты, так как пил их постоянно. - person nashyura; 20.03.2015
comment
Номер порта на стороне сервера логически должен совпадать с именем хоста на стороне сервера, а не с именем хоста / адресом на стороне клиента в X-Forwarded-For. Так определяется новая спецификация для заголовка Forwarded. Если разработчик кода для X-Forwarded-Host в вашем обратном прокси-сервере решил реализовать этот заголовок так же, как и в новой спецификации, то номер порта будет именно там. Многие обратные прокси-серверы являются программируемыми и позволяют администратору указать, какие заголовки с какими значениями вставлять, и в этом случае вы можете сделать это самостоятельно. - person James; 20.03.2015
comment
О боже! Я, должно быть, пил свой портвейн во время этого обсуждения. Ваш последний комментарий закрыл в моей голове пробел re: X-Forwarded-For. По какой-то безумной причине я понял, что заголовок X-Forwarded-For содержит целевой IP-адрес исходного запроса (хотя вы и вики четко заявили об обратном). - person nashyura; 20.03.2015
comment
Собираюсь поставить +1 к вашему ответу и отредактировать свой вопрос, но я все еще в затруднительном положении: пытаюсь выяснить исходную цель запроса, поэтому я хотел бы оставить его открытым. - person nashyura; 20.03.2015
comment
Собственно, нм. Вы ответили на мой вопрос. Следующим шагом, вероятно, должен быть другой пост. Спасибо. - person nashyura; 20.03.2015