Назад | Перейти на главную страницу

Обратный прокси-сервер Nginx для идентичных приложений ajax, выберите, какое из них с URL-адресом

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

location /T4C { proxy_pass http://192.168.10.4/T4C/; proxy_read_timeout 90; }

Он работает нормально, но, к сожалению, веб-приложение написано таким образом, что каждые 5 секунд оно перенаправляет вас на «http: //ip/T4C/Content/StartPage.aspx "Это означает, что имя моего местоположения всегда должно быть" / T4C ". Если я попробую / foo, он загрузит стартовую страницу, но как только сработает один из триггеров обновления, время ожидания доступа к / T4C / Content / StartPage.aspx Я пробовал использовать cookie:

location /crews {
  add_header Set-Cookie targetip=192.168.10.4/; #Tried with and without the slash

  proxy_pass    http://127.0.0.1/T4C; }

location /T4C {
  proxy_pass  http://$cookie_targetip/T4C/; }#Tried with and without the slashes, all permutaions

Это приводит к циклу перенаправления или внутренней ошибке сервера 500 по причинам, которые я не совсем понимаю (я думаю, что 500 происходит, когда не установлен файл cookie)

Я также попробовал переписать, и в настоящее время изучаю это, но опять же, я не совсем понимаю механику.

Я также пробовал читать о «происхождении», но примеры кажутся либо A / B-тестированием, либо балансировкой нагрузки. Я хочу прояснить здесь, что пользователь должен иметь возможность выбирать через URL-адрес, к какому внутреннему серверу они подключаются, и затем этот выбор должен сохраняться, даже если браузер будет продолжать попытки направить его на / T4C / *** Я знаю, что идеальной ситуацией было бы изменить веб-приложение, но, к сожалению, это вне моего контроля. Все системы запрограммированы одинаково, и этот код не мой, и я не могу его изменить.

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

Андрей.

Я думаю, у меня это работает. Благодарим Анубойза за то, что он поместил меня в http_sub _module. Это действительно то, что мне было нужно. Я считаю, что я перехватываю перенаправления и меняю их URL. Я обнаружил, что URL-адрес содержит параметр, указывающий приложению, куда перенаправить.

location /CREWS/  {
proxy_pass http://192.168.10.4/T4C/;
proxy_read_timeout  90;
sub_filter_once off; #########This is important. Defaults to ON
sub_filter 'ReturnUrl=%2fT4C%2f' 'ReturnUrl=%2fCREWS%2f' ;
sub_filter '/T4C/' '/CREWS/' ;
sub_filter '/T4C/Content/Login.aspx?ReturnUrl=%2fT4C%2f' '/CREWS/Content/Login.aspx?ReturnUrl=%2fCREWS%2f';
sub_filter_types '*';

}

Вам нужен ngx_http_sub_module. Он не включен в исходный код nginx (но может быть включен в ваш дистрибутив Linux), поэтому вам, возможно, придется собрать nginx из исходного кода. Это позволяет субstitude произвольные строки в теле ответа.

Если я правильно понял, в вашем случае вам понадобится что-то вроде:

location /T4C  {
    proxy_pass http://127.0.0.1/T4C/;
    proxy_read_timeout  90;
    sub_filter '127.0.0.1' '192.168.10.4';
}