Использование mod_rewrite для проксирования
Этот документ дополняет mod_rewrite документацию по справке. Он описывает, как использовать флаг RewriteRule [P] для проксирования содержимого на другой сервер. Приведены несколько рецептов, описывающих распространенные сценарии.
Проксирование содержимого с помощью mod_rewrite
- Описание:
-
mod_rewrite предоставляет флаг [P], который позволяет передавать URL-адреса через mod_proxy на другой сервер. Здесь приведены два примера. В одном примере URL-адрес передается напрямую на другой сервер и обрабатывается так, как будто это локальный URL-адрес. В другом примере мы проксируем отсутствующее содержимое на сервере бэкенда.
- Решение:
-
Чтобы просто сопоставить URL-адрес с другим сервером, мы используем флаг [P] следующим образом:
RewriteEngine on RewriteBase "/products/" RewriteRule "^widget/(.*)$" "http://product.example.com/widget/$1" [P] ProxyPassReverse "/products/widget/" "http://product.example.com/widget/"
Во втором примере мы проксируем запрос только в том случае, если мы не можем найти ресурс локально. Это может быть очень полезно при миграции с одного сервера на другой, когда вы не уверены, что все содержимое уже перенесено.
RewriteCond "%{REQUEST_FILENAME}" !-f RewriteCond "%{REQUEST_FILENAME}" !-d RewriteRule "^/(.*)" "http://old.example.com/$1" [P] ProxyPassReverse "/" "http://old.example.com/" - Обсуждение:
-
В каждом случае мы добавляем директиву
ProxyPassReverseдля обеспечения корректной передачи любых редиректов, выданных бэкенд-сервером, клиенту.По возможности используйте
ProxyPassилиProxyPassMatch, а не mod_rewrite.
© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/rewrite/proxy.html