0

我在反向代理服务器后面使用Subversion Edge 5.2.2 。乍一看,所有服务 ViewVC、控制台和 Subversion 服务器看起来都很好/工作。

但是,Subversion 服务器不适用于特定的 Subversion 命令,例如svn cp返回

svn: E175002: '/svn/petclinic/!svn/rvr/16/trunk' 上的 HTTP 状态 502 'Bad Gateway'

如果我绕过反向代理并直接访问 Subversion Edge,这些命令确实有效。

Subversion Edge 文档没有关于反向代理配置的任何信息,因此这个“企业”产品似乎不支持这种典型的“企业”部署模式。

可以将 Subversion Edge 工作配置为在反向代理后面正常工作吗?应该如何配置?

4

1 回答 1

3

出现这个错误是因为 nginxDestination没有修改就将 header 传递给了 subversion 服务器。如果你在 nginx 服务器上使用https而在 subversion 服务器上只使用http,subversion 将无法执行 COPY 或 MOVE 方法,因为Destinationheader 包含一个https://值。

您可以通过检查 nginx 来确认这一点access.log;如果您看到带有502响应的 COPY 或 MOVE 请求,然后是 DELETE,那么这很可能是问题所在,例如:

… COPY /foo/!svn/rvr/111/trunk HTTP/1.1" 502 …
… DELETE /foo/!svn/txn/111-6v HTTP/1.1" 204 …

您可以通过在任一服务器上重写 Destination 标头来解决此问题:

Subversion 服务器上的 Apache

RequestHeader edit Destination ^https http early

或者nginx 代理服务器:

set $dest $http_destination;
if ($http_destination ~ "^https://(.+)$") {
    set $dest http://$1;
}
proxy_set_header Destination $dest;
于 2018-08-09T21:56:47.967 回答