Apache-2.2
混合 Subversion“SVNParentPath”和每個儲存庫的配置?
給定一個使用 SVNParentPath 的典型 Subversion/Apache 配置,儲存庫託管
/svn/
如下:<Location /svn> DAV svn SVNParentPath /srv/source/svn/repos SVNReposName "Subversion Repository" AuthzSVNAccessFile /srv/source/svn/authz Satisfy Any AuthType Basic AuthBasicProvider file AuthName "Subversion Repository" AuthUserFile /srv/source/svn/htpasswd Require valid-user </Location>
有沒有一種方法可以覆蓋特定儲存庫的此配置,而不必將它們託管在不同的路徑上?也就是說,有什麼辦法可以添加這樣的
Location
塊……<Location /svn/my_special_repo> SVNPath /srv/source/svn/repos/my_special_repo AuthzSVNAccessFile /srv/source/svn/repos/my_special_repo/conf/authz </Location>
…並讓它覆蓋
Location
塊中提供的配置/svn
?我使用上述配置執行此操作的嘗試在 Apache 錯誤日誌中遇到了奇怪且無用的錯誤,例如:[Wed Feb 02 11:28:35 2011] [error] [client 10.10.209.120] (20014)Internal error: Can't open file '/srv/source/svn/repos/svn/format': No such file or directory
這一切似乎都是 mod_dav_svn 告訴我我不能做我想做的事的方式。我對解決方案或替代方案持開放態度!
編輯:嗯,我可以看到這個問題在讀者中引起了很多興奮。作為記錄,我最終可能會為我們所有現有的儲存庫生成每個儲存庫的配置,然後放棄
SVNParentPath
基於配置的配置。每個 repo 的 Apache 配置是最小的,尤其是使用類似mod_macro的東西;困難的部分是拆分全域 authz 文件。如果您以前這樣做過,我們將不勝感激。
我討厭在未回答的問題列表中看到我自己的問題,所以這就是我們所做的:
- 在我們的主伺服器配置中,我們有:
<Location /svn/> SVNParentPath /srv/source/svn/repos </Location>
- 我們採用以下
mod_macro
方法為新儲存庫複製此行為:<Macro LegacySubversionRepo $name> # Override SVNParentPath block in main vhost config. RewriteRule ^/svn/$name /repo/$name [PT] <Location /repo/$name> Order deny,allow Allow from all Use LdapAuth \ "$name svn repository" \ /srv/source/svn/htpasswd DAV svn SVNPath /srv/source/svn/repos/$name AuthzSVNAccessFile /srv/source/svn/authz SVNAutoversioning On Satisfy Any </Location> </Macro>
RewriteRule
允許儲存庫配置覆蓋<Location /svn/>
主配置中否則會匹配請求的配置。
htpasswd
有了這個,採用每個儲存庫的身份驗證和授權配置(而不是這裡使用的全域文件)變得相對容易。