В определении от apache.org говорится:
Эта директива позволяет Apache httpd настраивать URL-адрес в заголовках Location, Content-Location и URI в ответах перенаправления HTTP. Это важно, когда Apache httpd используется в качестве обратного прокси (или шлюза), чтобы избежать обхода обратного прокси из-за перенаправлений HTTP на внутренних серверах, которые остаются за обратным прокси.
Только заголовки HTTP-ответа, указанные выше, будут переписаны. Apache httpd не будет перезаписывать другие заголовки ответов и по умолчанию не перезаписывает URL-адреса внутри HTML-страниц. Это означает, что если прокси-контент содержит абсолютные URL-ссылки, они будут обходить прокси. Чтобы переписать содержимое HTML в соответствии с прокси, вы должны загрузить и включить mod_proxy_html.
path - это имя локального виртуального пути; url - это частичный URL-адрес удаленного сервера. Эти параметры используются так же, как и для директивы ProxyPass.
Может кто-нибудь объяснить мне, как это работает. В общем, что делает эта директива?
Если сервер фактически обрабатывает запрос, выполняет перенаправление на другой URL-адрес на этом сервере, ProxyPassReverse
Директива переписывает URL-адрес с точки зрения обратного прокси-сервера. Например, как указано в Apache документация, если:
http://reverseproxy.com/mirror/foo/bar
отправляется (обратное проксирование) в
http://backend.example.com/bar
для обработки, но на внутреннем сервере определяется, что правильный URL-адрес должен был быть quux
, то есть запрос должен быть перенаправлен на
http://backend.example.com/quux
в ProxyPassReverse
Директива перезаписывает URL (на обратном прокси) на
http://reverseproxy.com/mirror/foo/quux
перед пересылкой ответа HTTP-перенаправления клиенту. Таким образом, клиент знает только об обратном прокси-сервере, но, тем не менее, может сделать требуемый запрос на правильный URL-адрес http://reverseproxy.com/mirror/foo/quux
который затем будет обратным прокси-сервером на внутренний сервер и обработан как обычно. Короче говоря, он просто позволяет обратному прокси-серверу возвращать правильные заголовки URI в ответах перенаправления HTTP.
Из Руководство по обратному прокси-серверу Apache 2.4:
Чтобы гарантировать, что и Location: заголовки, сгенерированные из бэкэнда, изменены так, чтобы они указывали на обратный прокси, а не обратно на себя, чаще всего требуется директива ProxyPassReverse:
ProxyPass "/" "http://www.example.com/"
ProxyPassReverse "/" "http://www.example.com/"
Если у вас есть клиент и 2 сервера, Proxy и Origin, где Origin выполняет фактическую работу (генерирует ответ), а Proxy просто отправляет запросы к Origin, хорошая архитектура сервера - это когда
Если Origin не знает о прокси, это мощь происходит так, что Origin возвращает клиенту HTTP-перенаправление (HTTP 301 или 302) через прокси, что указывает прямо себе, Origin. И это проблема, потому что браузер напрямую свяжется с Origin в следующем раунде, что нарушит пункт 2.
Поскольку ответы на перенаправление HTTP возвращаются прокси-серверу к клиенту, прокси-сервер может / должен изменить эти перенаправления так, чтобы Location по-прежнему указывало на прокси. Таким образом, автономное приложение, работающее в Origin, не знающее о прокси, может генерировать любой URL-адрес перенаправления, если прокси правильно настроен.