Svn 反向代理服务器后面的Subversion Edge返回HTTP状态502';坏网关';

Svn 反向代理服务器后面的Subversion Edge返回HTTP状态502';坏网关';,svn,reverse-proxy,subversion-edge,Svn,Reverse Proxy,Subversion Edge,我在反向代理服务器后面使用。乍一看,ViewVC、console和Subversion服务器的所有服务都很好/正常工作 但是,Subversion服务器不适用于特定的Subversion命令,例如svn cpreturns svn:E175002:上出现意外的HTTP状态502“坏网关” “/svn/petclinic/!svn/rvr/16/主干' 如果我绕过反向代理并直接访问Subversion边缘,那么这些命令确实有效 Subversion Edge文档中没有关于反向代理配置的任何信息,因

我在反向代理服务器后面使用。乍一看,ViewVC、console和Subversion服务器的所有服务都很好/正常工作

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

svn:E175002:上出现意外的HTTP状态502“坏网关” “/svn/petclinic/!svn/rvr/16/主干'

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

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


能否将Subversion边缘工作配置为在反向代理后正确工作?应该如何配置它?

发生此错误是因为nginx未经修改就将
目标
头传递给subversion服务器。如果您在nginx服务器上使用https,但在subversion服务器上仅使用http,subversion将无法执行复制或移动方法,因为
目标
标头包含
https://

您可以通过检查nginx的
access.log
来确认这一点;如果您看到复制或移动请求带有
502
响应,然后是删除,则这可能就是问题所在,例如:

… COPY /foo/!svn/rvr/111/trunk HTTP/1.1" 502 …
… DELETE /foo/!svn/txn/111-6v HTTP/1.1" 204 …
您可以通过在以下任一服务器上重写目标标头来解决此问题:

Subversion服务器上的Apache 或nginx代理服务器:
发生此错误的原因是nginx未经修改就将
目的地
头传递给subversion服务器。如果您在nginx服务器上使用https,但在subversion服务器上仅使用http,subversion将无法执行复制或移动方法,因为
目标
标头包含
https://

您可以通过检查nginx的
access.log
来确认这一点;如果您看到复制或移动请求带有
502
响应,然后是删除,则这可能就是问题所在,例如:

… COPY /foo/!svn/rvr/111/trunk HTTP/1.1" 502 …
… DELETE /foo/!svn/txn/111-6v HTTP/1.1" 204 …
您可以通过在以下任一服务器上重写目标标头来解决此问题:

Subversion服务器上的Apache 或nginx代理服务器:
set $dest $http_destination;
if ($http_destination ~ "^https://(.+)$") {
    set $dest http://$1;
}
proxy_set_header Destination $dest;