Я пытаюсь развернуть сервлет причала с использованием ARR и urlrewrite для создания обратного прокси. Если я включу «Хост обратной перезаписи в заголовках ответов», все будет работать нормально. Я обращаюсь к сервлету по адресу www.example.com/servlet, адрес в браузере остается прежним, но доступ к сервлету осуществляется по адресу localhost: 8080.
Проблема в том, что этот сервлет возвращает 302 перенаправления в зависимости от параметров получения. Так, например, если я перейду на www.example.com/servlet?input=cleaning, я получу перенаправление 302, которое может перейти на www.cleaningexample.com/howtoclean. Правило хоста обратной перезаписи означает, что вместо просмотра этого URL-адреса клиенту возвращается www.example.com/howtoclean.
Я не могу установить статическое исходящее правило, так как заранее не знаю, какой адрес может вернуть 302 редирект.
Если я отключу хост обратной перезаписи, тогда URL-адрес в браузере изменится с www.example.com/servlet на localhost: 8080 / servlet.
Я попытался заменить хост в исходящем правиле, но я не могу найти нигде, чтобы получить исходный заголовок местоположения, возвращаемый сервлетом, чтобы заменить перезаписанный хост местоположения.
Есть ли способ заставить это работать правильно?
Я только что столкнулся с очень похожей проблемой, используя IIS в качестве обратного прокси для другого HTTP-сервера, который у меня был локально. Пришлось перейти в модуль «Кэш маршрутизации запросов приложений». На правой панели есть ссылка «Настройки прокси-сервера». В этом диалоге настроек есть флажок «Обратить перезапись хоста в заголовках ответа». Снятие флажка устранило мою проблему.
Вы когда-нибудь понимали это? У меня такая же проблема. Я не могу заставить обе ситуации вести себя правильно. Либо я устанавливаю флажок, и при перенаправлении 302 заголовок местоположения ответа перезаписывается и никогда не работает, либо я снимаю флажок, и заголовок HOST является localhost, поэтому приложение не работает полностью.
Это похоже на то, что этот флажок должен быть немного умнее и сказать: «Если не 302, сделай это». Или мне нужно добавить правила / до и после, но я не думаю, что это возможно. :-(
---- Спустя 20 минут мне очень повезло, и я нашел ответ.
https://stackoverflow.com/a/14842856/8333628
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/proxy -preserveHostHeader:true /commit:apphost
Эта команда, а также хост обратной перезаписи в заголовках ответов UNCHECKED, похоже, работают. Внешние перенаправления работают, если этот флажок снят, и с этой командой для сохранения хоста нижележащее приложение больше не видит localhost: 8080, а видит исходный хост в адресной строке браузера. Оба работают !!!
Забавно, что в пользовательском интерфейсе просто нет опции для preserveHostHeader. Они просто так и не добавили галочку. :) Если вы зайдете в «редактор конфигурации» на панели управления, вы увидите его там, в схеме xml. Так что это законная настройка, которую они просто пропустили в параметрах пользовательского интерфейса. :(