У меня есть внутренний сервер, работающий на http://10.0.2.20/
из локальной сети, которая работает примерно так:
/ (root)
|
|_user1/
| |_www/
| |_private/
|
|_user2/
|_www/
|_private/
(etc.)
Доступ http://10.0.2.20/user1/
конечно, содержит «www» и «частные» папки и проксируется через общедоступный сервер с помощью обратного прокси Apache. Хочется, чтобы произошло следующее:
http://public-proxy-server/user1/
на самом деле показывает контент из http://10.0.2.20/user1/www/
без указания его в URL. (/ private / не будет доступен через публичный прокси-сервер).
Ключевым моментом здесь является то, чтобы он был динамичным, поэтому все запросы к http://public-proxy-server/*/
должен показывать контент из http://10.0.2.20/*/www/
. Опять же, прокси в настоящее время работает нормально; ниже конфигурация:
(На общедоступном сервере)
<VirtualHost *:80>
ServerName www.domain.com
ProxyRequests Off
ProxyPreserveHost On
ProxyVia full
ProxyPass / http://10.0.2.20/
ProxyPassReverse / http://10.0.2.20/
</VirtualHost>
(На внутреннем сервере)
<VirtualHost *:80>
...
#this directory contains folders 'user1' and 'user2'
DocumentRoot /var/www/
...
</VirtualHost>
На обратном прокси-сервере используйте ProxyPassMatch
:
ProxyPassMatch ^/([^/]+)/(.*)$ http://10.0.2.20/$1/www/$2
И вы, вероятно, все еще захотите /
корневое проксирование, так что оставьте это ProxyPass
на месте - просто убедитесь, что это ниже в ProxyPassMatch
, поскольку они проверены по порядку.