使用分块编码上传时使用 Haproxy + Nging 收到 411 错误

Receiving 411 errors with Haproxy + Nging when uploading with chunked encoding

这是我的服务器架构:

端口 443 --> haproxy 1.6.3 --> nginx 1.1.19 --> uwsgi 2.0.13.1 --> wsgi python 服务器 (Django)

我知道同时使用 haproxy+nginx 很奇怪,但我别无选择,因为我需要 haproxy 用于同一服务器上端口 443 上的另一个项目。

这是我的 haproxy 配置:

frontend www-https
   bind *:443 ssl crt /etc/ssl/private/
   mode     http
   option   httpclose
   acl nginx hdr_end(host) -i example.com

backend nginx
    mode                http
    balance             leastconn
    option              forwardfor
    option              http-server-close
    option              forceclose
    no option           httpclose
    server nginx-01 nginx:52654 check

这是我的 nginx 配置

server {
    listen      52654 default_server;
    charset     utf-8;
    client_max_body_size 75M;
    chunked_transfer_encoding on;
    location / {
        uwsgi_pass  django;
        proxy_buffering off;
        uwsgi_param  QUERY_STRING       $query_string;
        uwsgi_param  REQUEST_METHOD     $request_method;
        uwsgi_param  CONTENT_TYPE       $content_type;
        uwsgi_param  CONTENT_LENGTH     $content_length;

        uwsgi_param  REQUEST_URI        $request_uri;
        uwsgi_param  PATH_INFO          $document_uri;
        uwsgi_param  DOCUMENT_ROOT      $document_root;
        uwsgi_param  SERVER_PROTOCOL    $server_protocol;
        uwsgi_param  HTTPS              $https if_not_empty;

        uwsgi_param  REMOTE_ADDR        $remote_addr;
        uwsgi_param  REMOTE_PORT        $remote_port;
        uwsgi_param  SERVER_PORT        $server_port;
        uwsgi_param  SERVER_NAME        $server_name;
    }
}

我遇到的问题是,当我使用分块编码通过 Web 客户端上传时,我收到 411 HTTP 错误,需要内容长度。

如果我绕过 haproxy,它工作正常。但是使用 haproxy + nginx 给我分块编码的 411 错误。

有什么想法吗?

你的nginx版本太旧了。尝试升级它。