我们有一个nginx服务器,它代理标准的Apache+SVN设置。nginx设置是一个非常简单的代理:
server {
server_name svn.ourdomain.tld;
location / {
proxy_pass http://localhost:8080;
}
}Apache的设置如下:
<Location />
DAV svn
SVNParentPath /var/svn
AuthType Basic
AuthName "Authentication Required"
AuthUserFile /var/svn/.auth
Require valid-user
</Location>...which允许我们使用类似于http://svn.ourdomain.tld/repo的东西访问存储库。我们已经运作了两年了,没有问题。
最近,我们发现我们需要在服务器本身上检出一个存储库,但是每当我们这样做的时候,它似乎破坏了回购。从那时起,它将只响应一个301 Moved Permanently错误。
我们试过:
svn co file:///path/to/reposvn co svn://localhost/reposvn co svn://svn.ourdomain.tld/reposvn co svn+ssh://localhost/reposvn co svn+ssh://svn.ourdomain.tld/reposvn co http://localhost/reposvn co http://svn.ourdomain.tld/repo还尝试绕过nginx,得到相同的错误:
svn co http://localhost:8080/reposvn co http://svn.ourdomain.tld:8080/repo从另一台机器进行的签出按预期运行,直到我们尝试在服务器上签出,然后它拒绝使用相同的301错误。
更令人困惑的是,这个存储库服务器还承载了我们的哈德森CI服务器,它可以每小时提取和构建我们的项目。这使我们怀疑是svn客户端导致了通信错误。
同样令人困惑的是,删除然后使用svnadmin重新创建回购没有重置错误-回购仍然是不可用的,即使它是“新的”!重新启动apache和subversion (svnserve)对此或原始错误没有任何影响。
版本信息:
在回购服务器上运行时,svn export也会发生这种情况。从其他任何一个盒子/客户端运行,没有问题。下面是工作流程,以帮助澄清错误:
[~repo-server~]# svnadmin create {repo}; chown -Rf www:www {repo}[remote-client]# svn checkout http://svn.ourdomain.tld/repo[remote-client]# svn add file; svn ci -m ''[~repo-server~]# cd /var/www; svn export file:///path/to/repo/trunk ourproject[remote-client]# svn update失败,错误为301我还可以确认,这个框的主机名在这里没有影响,这是非常奇怪的:无论是否将svn.ourdomain.tld添加到/etc/hosts中,它仍然会中断--我们认为这可能是本地主机路由的一个问题,但情况似乎并非如此。
我们是否遗漏了文档中的一些内容,即当服务器位于同一个框上时,您不能签出回购协议?当我们在本地结帐时,我们怎样才能防止回购变得腐败?
发布于 2010-10-06 15:11:10
svn不处理HTTP重定向(这就是301错误),查看重定向指向的位置(wget,wireshark),从那里签出。
另外,这也是apache特有的问题,虚拟主机配置可能会破坏它。
https://serverfault.com/questions/188189
复制相似问题