Gittornado 与 Nginx 推送和拉取失败

Gittornado 与 Nginx 推送和拉取失败

我正在创建一个简单的网站来托管 git 存储库,就像 github 一样。我正在使用旋风处理 git Smart HTTP 请求,它在本地运行良好;我可以克隆、推送、拉取等……但是当我把它放在 Nginx 后面时,git 命令停止工作,除了“致命:远程端意外挂断”之外没有给出任何错误

我知道是 Nginx 导致了这个问题,因为如果我打开 tornado 正在运行的端口并通过它尝试我的 git 命令(即“git pull \http://mysite.com:8000/myrepositorymaster”,而不是“git pull \http://mysite.com/myrepositorymaster” [添加反斜杠是因为 Server Fault 说我有太多链接]) 一切都按预期工作。Nginx 访问和错误日​​志似乎没有说任何有趣的事情,所以我有理由相信这与 Nginx 压缩或分块请求/响应的方式有关,导致 git 认为发生了意外挂断,但我不知道该怎么做才能修复它,因为这是我第一次使用 Nginx。

我的 Nginx 配置文件基本上是这里;我尝试注释掉各种看似可能的选项,以查看它们是否导致了问题,但没有一个能解决问题,所以我认为我需要抑制某些默认行为,但我不知道是哪一个。

有什么想法可以解决这个问题吗?由于它不通过 Nginx 工作,我正在考虑将 git 请求重定向到 tornado 端口本身,但这感觉像是一种黑客行为,而不是一个干净的解决方案...

答案1

通常问题出在 git 使用的分块传输编码上。gittornado 和 git 附带的 CGI 后端也存在同样的问题。

这个 serverfault 答案建议proxy_buffering off;在位置块中设置。

相关内容