我有一个正在运行的生产网站分配给主机(redmine应用程序)。 我需要添加一个新的应用程序到一个子目录相同的主机。
这是在主机的基本文件夹中运行的redmine应用程序的当前虚拟主机configuration。
<VirtualHost *:80> ServerName redmine.hostname.com DocumentRoot "C:/BitNami/redmine-2.5.1-1/apps/redmine/htdocs/public/" RewriteEngine On RewriteRule ^/(.*)$ balancer://redminecluster%{REQUEST_URI} [P,QSA] ProxyPass / balancer://redminecluster ProxyPassReverse / balancer://redminecluster <Proxy balancer://redminecluster> BalancerMember http://127.0.0.1:3001 BalancerMember http://127.0.0.1:3002 </Proxy> </VirtualHost>
所以这个应用程序已经在redmine.hostname.com上运行了。 我想添加我自己的应用程序,我希望它在redmine.hostname.com/myapp/上运行。
无论我做了什么,我都无法做到这一点。 我不能改变redmine的path,我必须添加新的应用程序到同一个虚拟主机。 除了80以外没有任何开放的端口,所以我必须让它运行在redmine.hostname.com/myapp/
基本上,redmine应用程序必须回复所有不以redmine.hostname.com/myapp/开头的请求。 我的应用程序应该回复所有以redmine.hostname.com/myapp开头的请求。
我应该使用什么设置?
如果您的应用程序/ myapp所在的位置是c:/ myappdir,则配置apache以执行所需操作的最简单方法是使用此配置:
<VirtualHost *:80> serverName redmine.hostname.com DocumentRoot "C:/BitNami/redmine-2.5.1-1/apps/redmine/htdocs/public/" Alias /myapp "c:/myappdir" ProxyPass /myapp ! ProxyPass / balancer://redminecluster/ ProxyPassReverse / balancer://redminecluster/ <Proxy balancer://redminecluster> BalancerMember http://127.0.0.1:3001 BalancerMember http://127.0.0.1:3002 </Proxy> </VirtualHost>
如果使用感叹号作为ProxyPass的目标,将会在代理配置中排除/ myapp,如此处所述。 此外,您不需要特殊的RewriteRule,因为您不需要修改请求来重新扫描,ProxyPass就足够了。
这取决于你自己的应用程序是否托管在Apache服务器上,或者是代理到另一个服务器/进程。
如果它在Apache服务器本身,那么只需将“myapp”放入文档根目录即可。 然后,您需要删除您的ProxyPass行,并将其替换为一个位置匹配块
<VirtualHost *:80> serverName redmine.hostname.com DocumentRoot "C:/BitNami/redmine-2.5.1-1/apps/redmine/htdocs/public/" RewriteEngine On RewriteRule ^/(.*)$ balancer://redminecluster%{REQUEST_URI} [P,QSA] <LocationMatch "^(?!/myapp)"> ProxyPassMatch balancer://balancer://redminecluster </LocationMatch> ProxyPassReverse / balancer://redminecluster <Proxy balancer://redminecluster> BalancerMember http://127.0.0.1:3001 BalancerMember http://127.0.0.1:3002 </Proxy> </VirtualHost>
所以,策略是将所有不匹配/ myapp的内容转发到现有的redmine应用程序。 一切匹配/ myapp将转到文档根目录。 如果您自己的应用程序是代理,那么你需要另一个位置匹配块代理/ myapp到正确的位置。