Режим обратного прокси-сервера Apache перехватывает или перехватывает 302 ответа от внутреннего сервера и перенаправляет их внутренне, не отправляя ответ 302 обратно клиенту - PullRequest
6 голосов
/ 17 июля 2009

Кто-нибудь знает, как заставить Apache в режиме обратного прокси перехватывать или перехватывать 302 (или 30x) ответа от внутреннего сервера и перенаправлять их внутренне, не отправляя 30x ответ клиенту? В конечном счете, внутренний сервер, на который перенаправляется ответ, не будет доступен извне (или не указан в Apache conf).


Моя ситуация:
У меня есть web_server_A и web_server_B, прослушивающие порты 6666 и 7777. Эти порты недоступны извне, но доступны изнутри.
В конечном итоге я могу изменить поведение web_server_A, но не поведение web_server_B.
Apache прослушивает порты 80/443, доступные извне, и действует как обратный прокси-сервер, отправляющий запросы на адрес web_server_ {A, B} .example.com на web_server_ {A, B}

Клиент запрашивает у Apache web_server_A.example.com/foo. Apache передает запрос web_server_A, который делает некоторые вещи, а затем отправляет обратно Apache HTTP / 302-ответ, указывающий на web_server_B.example.com/bar/secret_token. Apache отправляет ответ 302 клиенту, который затем отправляет Apache HTTP-запрос для web_server_B.example.com/bar/secret_token. Apache передает запрос web_server_B, который что-то отвечает (обычно он отправляет большой файл).


Моя проблема:
Я не хочу, чтобы клиент знал о URL web_server_B.example.com/bar/secret_token, и в конечном итоге я не хочу, чтобы web_server_B был доступен извне.

web_server_A может сделать запрос к web_server_B, а затем отправить ответ от web_server_B без выдачи 302 ответа. Но ответ от web_server_B может занять некоторое время, может быть довольно большим, и web_server_A не должен тратить слишком много времени на любой запрос (у него нет возможности обрабатывать большие файлы).


Так что я подумал о функции «302 trapper», которая была бы полезна, если бы существовала, но до сих пор не нашла в Интернете ничего о том, как это сделать. Есть идеи?

Ответы [ 2 ]

0 голосов
/ 16 июля 2014

используя директиву ProxyPassReverse, web_server_A изменит заголовок Location, отправленный web_server_B, поэтому клиент не узнает о нем.

чтобы перехватить перенаправление с вышестоящего сервера, вы также можете отредактировать заголовок Location. Например, «Местоположение неустановленного заголовка» покажет Apache по умолчанию 30X страница ошибки

0 голосов
/ 17 июля 2009

Как обратный прокси-сервер, Apache не сможет блокировать ответы. Это не цензор. Вы могли бы написать что-то вроде этого самостоятельно, хотя.

...