我有一个从本地networking运行在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 /不能通过公共代理服务器访问)。
这里的关键是它是dynamic的,所以对http://public-proxy-server/*/所有请求应该显示来自http://10.0.2.20/*/www/内容。 再次,代理目前正常工作; 下面是configuration:
(在公共服务器上)
<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
而且你可能仍然需要/ root代理,所以保持ProxyPass的位置 – 只要确保它在ProxyPassMatch 下面 ,因为它们是按顺序检查的。