Apache 代理和重写,将目录附加到 URL

Apache 代理和重写,将目录附加到 URL

我有一个在本地网络上运行的后端服务器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是按顺序检查的。

相关内容