我有一个在本地网络上运行的后端服务器http://10.0.2.20/
,其服务类似于此:
/ (root)
|
|_user1/
| |_www/
| |_private/
|
|_user2/
|_www/
|_private/
(etc.)
当然,访问http://10.0.2.20/user1/
包含“www”和“private”文件夹,并使用 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>
答案1
在反向代理服务器上,使用ProxyPassMatch
:
ProxyPassMatch ^/([^/]+)/(.*)$ http://10.0.2.20/$1/www/$2
你可能仍然需要/
根代理,所以保留它ProxyPass
- 只要确保它是以下,因为它们ProxyPassMatch
是按顺序检查的。