在 Apache 中动态反向代理子文件夹到子域

在 Apache 中动态反向代理子文件夹到子域

我想将子文件夹动态代理到另一台主机上的子域。例如,我对单个子文件夹到子域进行了以下反向代理设置:

ProxyRequests Off

<Proxy *>
Order deny,allow
Allow from all
</Proxy>

ProxyPass /app1/ http://app1.myotherserver.tld/
ProxyPassReverse /app1/ http://app1.myotherserver.tld/

上面的方法运行良好(除了尾随的“/”问题)。但是,我需要添加另外 10 个类似的,app2、app3、app4 等……将来可能还会添加更多。添加每一个显然没有意义。

使用以下页面http://httpd.apache.org/docs/current/rewrite/proxy.html作为参考,我正在这样做:

RewriteRule ^/(.*)/$ http://$1.myotherserver.tld/ [P]
RewriteRule ^/(.*)/(.*)$ http://$1.myotherserver.tld/$2 [P]
ProxyPassReverse /$1/ http://$1.myotherserver.tld/

它有点起作用,但我现有的子文件夹被拉入该规则,并且我仍然遇到尾随“/”的问题。

我尝试在第一条规则中添加“?”,但这会破坏所有内容:

RewriteRule ^/(.*)?/$ http://$1.myotherserver.tld/ [P]

我如何使“http;//www.mywebserver.tld/app2”之类的东西起作用,但仍然允许这些有效的 URL 仍然起作用?

http://www.mywebserver.tld/style.css 
http://www.mywebserver.tld/images/title.png
http://www.mywebserver.tld/existingsubfolder
http://www.mywebserver.tld/existingsubfolder/page.php

答案1

您将需要使用重写条件来验证文件在代理之前不存在。

此外,只用一条规则就可以获得所需的行为:

RewriteCond /path/to/docroot%{REQUEST_URI} !-f
RewriteCond /path/to/docroot%{REQUEST_URI} !-d
RewriteRule ^/[^/]*/(.*)$ http://$1.myotherserver.tld/ [P]

ProxyPassReverse /$1/ http://$1.myotherserver.tld/

相关内容