Lighttpd 代理 -> Apache SVN mod_dav_svn - 通过命令行卡住但可以在浏览器中运行

Lighttpd 代理 -> Apache SVN mod_dav_svn - 通过命令行卡住但可以在浏览器中运行

我遇到了一个令人困惑的问题。很久以前,我安装了 Apache 2.4 和 mod_dav_svn,以便能够通过 https url 访问我的存储库。只有在 Apache 上,一切才能正常工作。现在我切换到 lighttpd,并且我已经使用proxy.serverlighttp 配置中的 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 端口。这需要我做一些工作,但它最终会起作用。

相关内容