nginx HTTP POST 411 错误解决方法 [GitLab]

tsl0922 发布于 2014/02/25 11:42
阅读 5K+
收藏 6

前两天切换了git osc的 nginx 服务器到 tengine,页面访问正常,后来发现有部分用户反映 push 会遇到 411 错误:

后来通过客户端调大 git 的 http.postBuffer 解决,可以正常push:

git config http.postBuffer 524288000

但是这样还是比较的麻烦,原来的 nginx 是不需要配置这个就可以 push 的(感谢 @廖凯 一直帮忙测试)。

开始以为是 nginx 的 client_max_body_size 配置问题,但是这个值已经是调大过的(200M),实际上这个测试的项目只有 70M 左右大小。所以问题不在这里,对比了前后的 nginx 配置文件,没有什么大的不同,但运行结果却不一样,基本可以确定是 nginx 版本的问题了。

原来的 nginx 版本是1.4.x的,切换到的 tengine 为最新的稳定版 1.5.2(nginx 1.2.x)。导致问题的原因是 tengine 的 nginx 版本过低, 不支持 chunked-encoding(分块传输编码) 请求,就会返回 411。

解决方法:

添加 HttpChunkinModule 解决。由于这个模块已经内置到了 nginx 1.3.9 以后的 nginx 核心了,所以原来的 nginx 1.4.x 没有这个问题。

模块介绍和具体安装过程见:http://wiki.nginx.org/HttpChunkinModule,把这个模块编译进去后给 server 节点添加一个配置就可以了:

server {
    chunkin on;
    error_page 411 = @my_411_error;
    location @my_411_error {
      chunkin_resume;
    }
}
加载中
0
红薯
红薯

咱们的服务器已经这样处理了?

tsl0922
tsl0922
是的
0
yaoweibin
yaoweibin
用最新的tengine-2.0.1版本吧,支持chunked in的
返回顶部
顶部