Обратный прокси-сервер 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 / *** Я знаю, что идеальной ситуацией было бы изменить веб-приложение, но, к сожалению, это вне моего контроля. Все системы запрограммированы одинаково, и этот код мне не принадлежит, и я не могу его изменить.

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

Эндрю.

0
задан 28 April 2017 в 09:11
2 ответа

Думаю, он у меня работает. Благодарим Анубойза за то, что поместил меня на 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 '*';

}
1
ответ дан 4 December 2019 в 16:16

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

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

location /T4C  {
    proxy_pass http://127.0.0.1/T4C/;
    proxy_read_timeout  90;
    sub_filter '127.0.0.1' '192.168.10.4';
}
0
ответ дан 4 December 2019 в 16:16

Теги

Похожие вопросы