我遇到了一个令人困惑的问题。很久以前,我安装了 Apache 2.4 和 mod_dav_svn,以便能够通过 https url 访问我的存储库。只有在 Apache 上,一切才能正常工作。现在我切换到 lighttpd,并且我已经使用proxy.server
lighttp 配置中的 https 管理了访问。这在浏览器中工作正常,我现在仍然可以通过浏览器访问我的存储库。但是,现在它不再适用于命令行或 tortoise svn。它无限期地挂起。日志中没有错误或其他东西,它只是挂起而没有错误。当我在命令行中取消请求时,它会显示,unable to connect...
但是当我在浏览器中输入相同的 url 时,它就可以正常工作。我不知道如何解决这个问题。
编辑:如果我在 lighttpd 端禁用 SSL 并通过端口 80 传递它,那么它也不起作用。它要求输入用户名和密码,然后它就挂起了。
这是我的 lighttpd 配置
$SERVER["socket"] == ":443" {
ssl.engine = "enable",
server.errorlog = "/var/log/lighttpd/ssl-error.log",
ssl.pemfile = "/etc/ssl/owncerts/defaultcert.pem",
HTTP["host"] == "myhost.com"{
server.document-root = "/srv/default/htdocs",
ssl.pemfile = "/etc/ssl/owncerts/myhost.com.pem",
proxy.server = (
"" => (("host" => "127.0.0.1", "port" => 8443))
)
}
}
这是我的 apache 配置
<VirtualHost *:8443>
ServerName https://myhost.com
<Location />
DAV svn
SVNPath /srv/svn/xxx
AuthType Basic
AuthName "xxx SVN Repository"
AuthUserFile /srv/svn/xxx/conf/users
AuthzSVNAccessFile /srv/svn/xx/conf/authz
Require valid-user
</Location>
</VirtualHost>
测试 1
当我通过 OPTIONS 请求检查时,curl
我得到了一个正确的输出,像这样 - Apache 和 Lighttp 访问日志中都有带有“200”的响应代码。
HTTP/1.1 200 OK
Date: Mon, 09 Mar 2015 13:07:27 GMT
Server: Apache/2.4.7 (Ubuntu)
DAV: 1,2
DAV: version-control,checkout,working-resource
DAV: merge,baseline,activity,version-controlled-collection
DAV: http://subversion.tigris.org/xmlns/dav/svn/depth
DAV: http://subversion.tigris.org/xmlns/dav/svn/log-revprops
DAV: http://subversion.tigris.org/xmlns/dav/svn/atomic-revprops
DAV: http://subversion.tigris.org/xmlns/dav/svn/partial-replay
DAV: http://subversion.tigris.org/xmlns/dav/svn/inherited-props
DAV: http://subversion.tigris.org/xmlns/dav/svn/inline-props
DAV: http://subversion.tigris.org/xmlns/dav/svn/reverse-file-revs
DAV: http://subversion.tigris.org/xmlns/dav/svn/mergeinfo
MS-Author-Via: DAV
Allow: OPTIONS,GET,HEAD,POST,DELETE,TRACE,PROPFIND,PROPPATCH,COPY,MOVE,LOCK,UNLOCK,CHECKOUT
Content-Length: 0
测试 2
如果我通过 svn 命令行执行一个简单的“checkout”请求,则会发生以下情况
这个请求是在 lighttpd 端
xxx.xxx.xx.xxx myhost.com - [09/Mar/2015:14:13:19 +0100] "OPTIONS /testrepos HTTP/1.1" 401 588 "-" "SVN/1.8.11 (x64-microsoft-windows) serf/1.3.8"
这个请求是在 apache 端
myhost.com:443 127.0.0.1 - - [09/Mar/2015:14:13:19 +0100] "OPTIONS /testrepos HTTP/1.0" 401 825 "-" "SVN/1.8.11 (x64-microsoft-windows) serf/1.3.8"
myhost.com:443 127.0.0.1 - brain [09/Mar/2015:14:13:19 +0100] "OPTIONS /testrepos HTTP/1.0" 200 1661 "-" "SVN/1.8.11 (x64-microsoft-windows) serf/1.3.8"
此时svn命令行客户端挂起。
测试 3
如果我在现有存储库(testrepos)上使用 CURL 执行简单的 OPTIONS 请求,它会按预期工作
这是 lighttpd 日志
xxx.xxx.xx.xxx myhost.com - [09/Mar/2015:14:30:41 +0100] "OPTIONS /testrepos HTTP/1.1" 200 0 "-" "curl/7.35.0"
这是 Apache 日志
myhost.com:443 127.0.0.1 - brain [09/Mar/2015:14:30:41 +0100] "OPTIONS /testrepos HTTP/1.0" 200 855 "-" "curl/7.35.0"
测试 4
不幸的是,我无法调试 svn 客户端的网络连接,1.8 中不再有这样的选项。此外,我已经在没有任何基本身份验证的情况下对其进行了测试。同样不起作用,Apache 和 Lighttpd 都返回 200 个响应代码,但 SVN CLI 客户端仍然挂起。当我尝试直接在 apache 端签出 URL 时,它http://myhost:8443/testrepos
也适用于 CLI 客户端。看来 Apache 和 Lighttp 之间的代理管道坏了。我可能会决定跳过错误搜索进度,将我的存储库切换到新端口而不是默认的 ssl 端口。这需要我做一些工作,但它最终会起作用。