Изменение заголовков с помощью маршрутизации запросов приложений IIS7

Я использую маршрутизацию запросов приложений IIS7 перед Tomcat в качестве замены перенаправления ISAPI. Основная функция обратного прокси-сервера работает хорошо, но у меня недостаточно информации в заголовках окончательного запроса. Мое приложение существует на нескольких поддоменах: customerone.ourservice.com, customertwo.ourservice.com и т. Д. На каждом поддомене выполняется одно и то же приложение, но с разным графическим оформлением.

В настоящее время приложение просматривает заголовок Host, чтобы определить, какой брендинг отображать. Когда я использую обратный прокси-сервер IIS7, эта информация теряется. Мои заголовки сейчас:

accept = text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
accept-charset = ISO-8859-1,utf-8;q=0.7,*;q=0.7
accept-encoding = gzip,deflate
accept-language = en-gb,en;q=0.7,en-us;q=0.3
cookie = JSESSIONID=......
host = 127.0.0.1:8080
max-forwards = 10
user-agent = Mozilla/5.0 (X11; U; Linux x86_64; en-GB; rv:1.9.0.15) Gecko/2009102815 Ubuntu/9.04 (jaunty) Firefox/3.0.15
x-original-url = /
x-forwarded-for = [iis7ip]:47567
x-arr-log-id = affbf81c-a5cf-4212-a43b-901cd9adcee6
connection = Keep-Alive

Есть ли способ вставить исходный заголовок Host в заголовки запроса, передаваемые обратным прокси-сервером?


person Adrian Cox    schedule 03.12.2009    source источник
comment
Я этого не делаю, но я заметил, что в нашей среде наши заголовки заменяются IIS7 на application / xhtml + xml без уважительной причины.   -  person furtive    schedule 30.01.2010


Ответы (2)


Маршрутизация запросов приложений имеет возможность сохранить исходный заголовок хоста: preserveHostHeader. Эта опция по умолчанию - false. Вы можете включить его с помощью:

"C:\Windows\System32\inetsrv\appcmd.exe" set config -section:system.webServer/proxy /preserveHostHeader:"True" /commit:apphost
person Atacan    schedule 24.08.2011
comment
Спасибо. Я больше не могу это тестировать (приложение было списано несколько месяцев назад), но ваш ответ выглядит как правильный способ сделать это, и я его принимаю. - person Adrian Cox; 25.08.2011
comment
+1 - у меня была аналогичная проблема с размещенным экземпляром YouTrack, и это решило проблему с неработающим входом OpenID - person Jakub Konecki; 09.07.2012
comment
Кто-нибудь знает, почему это работает только в ApplicationHost.config, а не в каждом отдельном web.config ?? - person Steven de Salas; 29.01.2016
comment
обратите внимание, что appcmd.exe находится в% systemroot% \ system32 \ inetsrv \ (используйте полный путь или добавьте его в переменную Paths), подробнее об этом здесь iis.net/learn/get-started/getting-started-with-iis/ - person BraveNewMath; 09.06.2016
comment
@StevendeSalas, похоже, из-за <section name="proxy" overrideModeDefault="Deny" allowDefinition="AppHostOnly" /> - особенно части overrideModeDefault="Deny". - person Bagus Tesa; 20.10.2017
comment
Спасибо! У меня есть сайт WordPress за обратным прокси, и все ссылки, использующие перезапись, не удались, пока я не применил эту команду. Мгновенное решение. Редко все проходит гладко. - person Dennis; 14.01.2019

Вы можете установить флаг preserveHostHeader вручную.

    <proxy enabled="true" preserveHostHeader="true" />

</system.webServer>

В интерфейсе настройки iis это значение можно найти в system.webServer/proxy.

введите описание изображения здесь

person hdev    schedule 21.08.2015
comment
Я обновил файл в этом месте в соответствии с этим ответом, и это не сработало. Затем я выполнил эту команду C: \ Windows \ System32 \ inetsrv ›appcmd.exe set config -section: system.webServer / prox y / preserveHostHeader: True / commit: apphost Что в конечном итоге устранило проблему. Он дает приятную обратную связь, когда вы его запускаете: применены изменения конфигурации в разделе system.webServer / proxy для MACHINE / W EBROOT / APPHOST в пути фиксации конфигурации MACHINE / WEBROOT / APPHOST - person BraveNewMath; 09.06.2016