首页 > 解决方案 > nginx 返回部分响应

问题描述

拥有带有反向代理配置的 NGINX Plus:

upstream busgw_services_backend {
 server esbacc002:8281;
 server esbacc004:8281;

 keepalive 32;
 zone busgw_services_backend 32k;
}

server {
    listen      443 ssl;
    listen      80;
    server_name busgw-acc;

    # some ssl settings

    location / {
       proxy_pass http://busgw_services_backend;
       proxy_set_header Host   $host;
       proxy_set_header X-Forwarded-For $remote_addr;

       health_check interval=2s passes=1  fails=2 uri=/services/healthcheck match=match_ok ;
    }

    access_log  /var/log/nginx/access.log  main if=$abnormal;
    error_log   /var/log/nginx/error.log   warn;
}

通常这种配置效果很好。但是 - 我们有一个只返回部分响应的请求。

后端响应是一个 WSDL,在单个块中返回长度为 0x13c6 (5062) 字节的分块响应。Nginx 仅返回 0xf7a (3962) 字节,然后无法产生额外的字节(或完成 0 块)

块大小有限制吗?

编辑:

禁用响应缓冲区导致返回整个响应(作为两个单独的块)

proxy_buffering off;

但是客户端没有收到最后的 0 块,导致等待额外的数据

标签: nginxnginx-reverse-proxy

解决方案


最后 - 以下设置似乎可以解决问题

proxy_buffering off;
proxy_cache off;
proxy_http_version 1.1;

推荐阅读