如何使用 Apache 设置代理托管和本地主机的组合?

如何使用 Apache 设置代理托管和本地主机的组合?

我正在尝试将同一个 Apache 作为 Subversion 和 Redmine (RubyOnRails 应用程序) 的服务器。当前设置是使用标准 mod_dav 和 mod_svn_dav 托管 Subversion 的 Apache,Redmine 在同一台服务器的 mongrel 上运行,端口为 3000,Apache mod_proxy_http 转发到它。

我是 Apache 的新手,所以我的设置是基于 Subversion 和 Mongrel 文档的标准设置。问题是标准的 Mongrel 配置如下:


ProxyRequests off

<VirtualHost *:80>
    ServerName  xxx.xxx.xxx.xxx
    ServerAlias serverName

    ErrorLog      logs/error.log
    CustomLog     logs/access.log common

    ProxyPass /   http://xxx.xxx.xxx.xxx:3000/
    ProxyPassReverse / http://xxx.xxx.xxx.xxx:3000
    ProxyPreserveHost on

    ProxyPass /images !
    ProxyPass /stylesheets !

    Alias /images "C:\redmine-0.8.4\public\images"
    Alias /stylesheets "C:\redmine-0.8.4\public\stylesheets"
</VirtualHost>

Subversion配置如下:


<Location /svn>
   DAV svn
   SVNParentPath "C:\svn_repository"
   AuthType Basic
   AuthName "Subversion Repository"
   AuthUserFile "C:\svn_repository\fat\http-auth-file"

   <LimitExcept GET PROPFIND OPTIONS REPORT>
     Require valid-user
   </LimitExcept>
</Location>

如上所示,Redmine 的映射为“/”,Subversion 的映射为“/svn”,但对我来说这不起作用,因为 Subversion 访问被转发到 Mongrel 服务器。从文档中我感觉 <Location> 的优先级高于 <VirtualHost>。

无论如何,上述设置不起作用。如果有人能帮助我找出正确的设置,我将不胜感激。

我还尝试更改 VirtualHost 设置,让 ProxyPass 和 ProxyPassReverse 映射到“/redmine”。这只能将主页转发到 mongrel,但 Redmine 应用程序中的其余 URL 不会被转换为 URL 中的额外“/redmine”。

因此,我倾向于第一个设置,将“/”转发到 Mongrel 上的 Redmine,将“/svn”转发到 subversion。但如果这不可能,我愿意接受第二个选项。

提前致谢。

答案1

看起来你错过了这个:

ProxyRequests off

<VirtualHost *:80>
    ServerName  xxx.xxx.xxx.xxx
    ServerAlias serverName

    ErrorLog      logs/error.log
    CustomLog     logs/access.log common

    ProxyPass /   http://xxx.xxx.xxx.xxx:3000/
    ProxyPassReverse / http://xxx.xxx.xxx.xxx:3000
    ProxyPreserveHost on

    ProxyPass /images !
    ProxyPass /stylesheets !

    ### note the line below ###
    ProxyPass /svn !
    ### note the line above ###

    Alias /images "C:\redmine-0.8.4\public\images"
    Alias /stylesheets "C:\redmine-0.8.4\public\stylesheets"
</VirtualHost>

我很确定你只是错过了没有对 /svn 路径执行 ProxyPass

相关内容