VirtualHost Same ServerName不同的目录

时间:2014-11-03 17:46:59

标签: apache mod-rewrite apache2 virtualhost httpd.conf

我有一个正在运行的生产网站分配给主机(redmine应用程序)。我需要将新应用程序添加到与子目录相同的主机中。

这是redmine应用程序的当前虚拟主机配置,它在主机的基本文件夹中运行。

<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的路径,我必须将新的应用程序添加到同一个虚拟主机。没有80以外的开放端口,所以我必须让它在 redmine.hostname.com/myapp /

运行

基本上,redmine应用程序必须回复所有不以 redmine.hostname.com/myapp / 开头的请求。我的应用程序应回复所有以 redmine.hostname.com/myapp 开头的请求。

我应该使用哪些设置?

2 个答案:

答案 0 :(得分:3)

如果您的application / 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,如文档here所示。此外,您不需要特殊的RewriteRule,因为您没有修改redmine的请求,ProxyPass就足够了。

答案 1 :(得分:2)

这取决于您自己的应用程序是在托管服务器本身托管,还是代理到其他服务器/进程。

如果它位于apache服务器本身,那么只需将'myapp'放入文档根目录即可。然后,您需要删除ProxyPass行并将其替换为locationmatch块

<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到正确的位置。