вторник, 18 июня 2019 г.

IIS - редирект запросов с тестового сервера на девелоперский localhost

На работе возникла ситуация:
JS-баг , воспроизводящийся только на реальном телефоне, но не в эмуляции мобильного устройства в F12 Chrome

у тестовых мобильных устройств нет доступа во внутреннюю сеть, за исключением 80 и 81 портов тестового сервера.
то есть, мне светил такой процесс отладки: изменил что-то в своей Visual Studio, вручную копирую измененный файл на тестовый сервер. и так ради каждого (вонючего) изменения.

Я нашел выход из ситуации: настроил на 81 порту тестового сервера прокси на свой девелоперский комп. и тут опишу вкратце процесс.

шаг первый - открыть свой запущенный в localhost проект с браузера другого ПК 

(в моем случае - тестового сервера)
решение проблемы описано вот тут:

нужно помнить, что доступ на уровне файрвола может блокироваться на обоих концах. мне пришлось создать на одном конце (тестовый сервер) исходящее правило для нужного мне порта (порта, под которым моя Студия запускает), на другом (мой комп) - правило для входящих соединений для этого порта.

по поводу команды:
netsh http add urlacl url=http://*:51603/ user=everyone  (upd.:  на следующий день перестала работать отладка просто по F5 на девелоперском компе. проблема решилась, когда отменил эту команду командой
 netsh http delete urlacl url=http://*:51603/ (или как-то так)
)
upd2:  а вот сейчас опять выполнил "netsh http add urlacl " - и ниче , с локалхоста тоже нормально запускается. в общем, ну не знаю.
upd3: кажется, проблема - в том, что мои изменения в файле <solution>/.vs/config/applicationhost.config затираются, нужно их заново вносить периодически



(естественно, порт заменить на нужный)
могу сказать, что не понял сходу, что она делает, прописывает какое-то разрешение. но мне пришлось заменить "user=everyone" на "user=Все" - (имя пользователя everyone в русской винде)

как проверить, устанавливается ли соединение (не закрыто ли на уровне файрвола или сети):

telnet 90.82.14.55 62518
если соединения нет - будет так:

Connecting To 90.82.14.55...Could not open connection to the host, on port 62518
: Connect failed

(на том конце сервер должен быть, естественно, поднят)

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


шаг второй: настройка проксирования в IIS

основывался на этой статье:

скачал по приведенной в статье ссылке оффлайн-установщик модуля 
создал единственное правило типа "обратный прокси-сервер"

в первую строчку ввел 
90.82.14.55:62518
остальное все оставил без изменений.


подводные камни:
1) по окончании создания убедитесь, что правило создано и отображается в IIS (у меня с первого раза просто не сохранилось, почему-то)
2) имейте в виду, что проксируются только те запросы, которые не обрабатывает, например, подключенное к подпапке приложение. мне тестовый экземпляр приложения пришлось удалить


после этого заработало!

единственно, rewriter-правило теперь применяется ко всем запросам. чтоб оно применялось только  к запросам на определенный порт - добавляем в правило условие:
{SERVER_PORT} - matches the pattern - номер порта



мой комп: Windows 10, Visual Studio 2017
на тестовом сервере: IIS  8.5, Windows Server 2012

P.S. помните, что на реальном телефоне JS и CSS кешируются (для того, чтоб побороть проблему, планирую подключить телефон к DevTools (F12) на ПК и поставить галочку "disable cache", но это уже другая ичтория)