Руководство по URL преобразованиям
Управление содержанием
Обратный Proxy
Описание:
…
Решение:
##
## apache-rproxy.conf -- Конфигурация Apache для использования обратного Proxy
##
# тип сервера
ServerType standalone
Listen 8000
MinSpareServers 16
StartServers 16
MaxSpareServers 16
MaxClients 16
MaxRequestsPerChild 100
# параметры функционирования сервера
KeepAlive on
MaxKeepAliveRequests 100
KeepAliveTimeout 15
Timeout 400
IdentityCheck off
HostnameLookups off
# пути для рабочих файлов
PidFile /path/to/apache-rproxy.pid
LockFile /path/to/apache-rproxy.lock
ErrorLog /path/to/apache-rproxy.elog
CustomLog /path/to/apache-rproxy.dlog "%{%v/%T}t %h -> %{SERVER}e URL: %U"
# неиспользуемые пути
ServerRoot /tmp
DocumentRoot /tmp
CacheRoot /tmp
RewriteLog /dev/null
TransferLog /dev/null
TypesConfig /dev/null
AccessConfig /dev/null
ResourceConfig /dev/null
# повышаем скорость работы и безопасность
<Directory />
Options -FollowSymLinks -SymLinksIfOwnerMatch
AllowOverride None
</Directory>
# страница состояния для контроля обратного proxy
<Location /apache-rproxy-status>
SetHandler server-status
</Location>
# включаем механизм URL преобразований
RewriteEngine on
RewriteLogLevel 0
# определяем ассоциативный массив редиректов со списками величин в которых
# mod_rewrite произвольно выбирает какую-либо из них
RewriteMap server rnd:/path/to/apache-rproxy.conf-servers
# проверка того что страница состояния обрабатывается локально
# и проверка того, что никто не использует наш proxy кроме нас самих
RewriteRule ^/apache-rproxy-status.* - [L]
RewriteRule ^(http|ftp)://.* - [F]
# теперь выбираем возможные серверы для конкретных типов URL
RewriteRule ^/(.*\.(cgi|shtml))$ to://${server:dynamic}/$1 [S=1]
RewriteRule ^/(.*)$ to://${server:static}/$1
# и делегируем сгенерированный URL передавая его
# через proxy-модуль
RewriteRule ^to://([^/]+)/(.*) http://$1/$2 [E=SERVER:$1,P,L]
# и гарантируем что все другие ресурсы запрещены
# когда они прошли через вышестоящие правила...
RewriteRule .* - [F]
# включаем Proxy-модуль без кэширования
ProxyRequests on
NoCache *
# устанавливаем обратное отображение URL для ответов при редиректе
ProxyPassReverse / http://www1.foo.dom/
ProxyPassReverse / http://www2.foo.dom/
ProxyPassReverse / http://www3.foo.dom/
ProxyPassReverse / http://www4.foo.dom/
ProxyPassReverse / http://www5.foo.dom/
ProxyPassReverse / http://www6.foo.dom/
##
## apache-rproxy.conf-servers -- таблица выбора Apache/mod_rewrite
##
# список backend серверов которые обслуживают статические
# страницы (HTML файлы и картинки, и т.д.)
static www1.foo.dom|www2.foo.dom|www3.foo.dom|www4.foo.dom
# список backend серверов которые обслуживают динамически
# сгенерированные страницы (CGI программы или mod_perl скрипты)
dynamic www5.foo.dom|www6.foo.dom