mod_rewrite для обслуживания статического файла на основе определенной строки запроса с помощью mod_proxy

Я хотел бы иметь обратный прокси (apache httpd с mod_proxy ) перед IIS, на котором размещена веб-служба SOAP. .

Проблема, с которой я столкнулся, заключается в том, что клиенты SOAP запрашивают у веб-сервера подробности о веб-службе, загружая WSDL с конечной точки. Этот WSDL создается веб-службой и содержит URL-адреса веб-службы, которые должен использовать клиент. Проблема в том, что когда веб-служба находится за прокси-сервером, сгенерированные URL-адреса содержат неправильный частный адрес.

веб-служба IIS расположена по адресу

Проблема, с которой я столкнулся, заключается в том, что клиенты SOAP запрашивают у веб-сервера подробную информацию о веб-службе, загружая WSDL с конечной точки. Этот WSDL создается веб-службой и содержит URL-адреса веб-службы, которые должен использовать клиент. Проблема в том, что когда веб-служба находится за прокси-сервером, сгенерированные URL-адреса содержат неправильный частный адрес.

веб-служба IIS находится по адресу

Проблема, с которой я столкнулся, заключается в том, что клиенты SOAP запрашивают у веб-сервера подробную информацию о веб-службе, загружая WSDL с конечной точки. Этот WSDL создается веб-службой и содержит URL-адреса веб-службы, которые должен использовать клиент. Проблема в том, что когда веб-служба находится за прокси-сервером, сгенерированные URL-адреса содержат неправильный частный адрес.

веб-служба IIS расположена по адресу http://internal.host.com/Dirname/Service.asmx и его можно вызвать с помощью GET или POST .

WSDL извлекается с GET с WSDL в качестве строки запроса:

http://internal.host.com/Dirname/Service.asmx?WSDL

Обратный прокси представляет веб-службу как:

https://proxy.host.com/VirtualDir/Service.asmx

И моя проблема в том, что содержимое динамически сгенерированного WSDL содержит внутренние URL-адреса (что прокси подключается к).

Я бы хотел избежать взлома / перекомпиляции самой веб-службы, поэтому, когда я думал об альтернативных решениях, я задавался вопросом;

Могу ли я сделать так, чтобы httpd на прокси-сервере каким-то образом перехватывали вызов? WSDL-документа и вместо этого обслуживали статический контент, и по-прежнему перенаправлять другие запросы (включая параметры GET) на внутренний сервер IIS? ] Соответствующая конфигурация httpd в настоящее время выглядит так:

ProxyPass "/VirtualDir/"  "http://internal.host.com/Dirname/"

И я подумал, что, возможно, RewriteCond и RewriteRule можно было бы использовать каким-то умным способом, чтобы перехватывать только запросы к /.../ Service.asmx? WSDL и вместо этого обслуживать статический локальный документ, и перенаправить «остальное» в IIS, но я действительно не знаю, как это сделать правильно, не нарушая ничего другого.

Обратный прокси-сервер также используется для других служб, в других виртуальных «каталогах».

0
задан 26 September 2016 в 16:53
1 ответ

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

Кажется, все работает нормально, но его нужно будет обновлять каждый раз, когда интерфейс WebService изменяется.

Я установил статический файл на прокси-сервере apache http по этому адресу:

https://proxy.host.com/other_static_dir/Service.wsdl

Он содержит правильная спецификация WSDL с общедоступными URI для использования. Я загрузил его из IIS с помощью wget и просто исправил с помощью текстового редактора.

0
ответ дан 5 December 2019 в 09:29

Теги

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