每个存储库AuthzSVNAccessFile使用单个apache配置文件或其他shell脚本解决方案的apache规则



我正在编写一组svn挂钩,以允许对svn存储库进行远程管理,就像gitolite对GIT所做的那样。

我创建了为我拥有的每个存储库生成AuthzSVNAccessFile的脚本,现在我需要告诉Apache根据存储库查找它们中的每一个。

我不能为每个存储库都有一个apache配置文件,因为它需要重新启动apache服务器。

我知道我可以使用一个AuthzSVNAccessFile来管理多个存储库,但构建文件的脚本需要时间(需要发现存储库中每个目录的完整路径),并且会使提交花费太长时间。

我试着使用mod_rewrite,但它不起作用,也许我用错了。

基本上,我需要在我的apache配置文件中有一个规则,根据请求的URL读取不同的文件,这可能吗?怎样

或者我需要一个能够重写文件块的脚本。我使用sed来替换模板中的字符串,但不知道如何使用它来替换多行。

感谢您抽出时间

不知道你为什么要使用mod_rewrite,除非我完全误解了你的问题。但是,听起来您正在使用SVNParentPath,并且在弄清楚如何为所有存储库配置authz设置时遇到了问题。

你有几个选择。

使用一个authz文件

实际上,您可以生成一个authz文件,并指定规则应用于哪些存储库。语法的形式为[repos-name:path](如您在Subversion Book的基于路径的授权部分中所见)。这样做的一个缺点是,如果你有很多存储库和很多有规则的路径,它可能会减慢速度。这听起来像是你遇到过的。可以帮助缓解这种情况的一件事是使用以下配置

SVNPathAuthz short_circuit

SVNPathAuthz控制当需要访问除请求的URI之外的其他路径(例如,日志、提交等)时,如何授权对除URI之外的路径的请求。默认行为是发出子请求。这将在httpd中生成一个新的GET请求,并通过httpd的所有授权基础结构发送该请求。然而,在几乎所有情况下,这是不需要的,因为唯一可以随着用于服务SVN的位置下的路径而变化的授权配置是mod_authz_SVN配置。短路,告诉Subversion避免所有这些,并简单地将授权信息直接发送给mod_authz_svn,后者直接提供限制延迟的答案。

这可能还不够,所以有几个替代方案,但你至少需要1.7才能使用它们。

AuthzSVNReposRelativeAccessFile

Subversion 1.7添加了一个新的配置指令,允许您指定相对于存储库的conf子目录的路径。例如,如果您有一个名为foo的repo,您可以将authz文件放在/path/to/foo/conf/authz中,然后设置以下配置值:

AuthzSVNReposRelativeAccessFile authz

AuthzSVNAccessFile使用的1.7之前的指令是相对于服务器根路径的。

存储库内Authz*

Subversion 1.8允许您将authz文件存储在存储库中。因此,例如,如果您将repo中名为conf的目录中的文件提交为authz文件,那么您将执行以下操作:

AuthzSVNAccessFile ^/authz

^/语法将替换为存储库的完整路径。

如果您决定使用此软件,您可能需要阅读链接的1.8发行说明中的详细信息。

最新更新