nginx 打开gzip会切断来自上游的响应

tf7tbtn2  于 2022-11-02  发布在  Nginx
关注(0)|答案(1)|浏览(150)

我的上游服务器返回了非常大的JSON响应(5~ 8 GB)。
我试图通过在nginx上启用gzip来压缩这些响应。

server {
    listen 0.0.0.0:8080;

    location / {
        gzip on;
        gzip_comp_level 1;
        gzip_types *;
        gzip_proxied any;

        proxy_pass http://localhost:8081;
    }
}

这个配置在技术上是可行的。至少,它适用于较小的响应(压缩前~ 150 MB)。当我试图下载大响应(压缩前~ 7. 5GB)时
proxy_max_temp_file_size
它在中间被切断了,也就是说,我看到了curl的消息

curl: (18) transfer closed with outstanding read data remaining

而且响应本身是不完整的(平均它只下载了~ 7. 5GB中的~ 5. 3GB)
我还看到了nginx的日志

2022/04/20 01:18:45 [error] 37#37: *135 upstream prematurely closed connection while reading upstream, client: 127.0.0.1, server: , request: "POST / HTTP/1.1", upstream: "http://127.0.0.1:8081/", host: "localhost:8080"

我试着增加proxy_max_temp_file_size,并且,我试着禁用缓冲。没有任何效果
有什么想法吗?
编辑:这是我使用的docker映像中内置的nginx.conf

worker_processes  auto;
error_log         "/opt/bitnami/nginx/logs/error.log";
pid               "/opt/bitnami/nginx/tmp/nginx.pid";

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format    main '$remote_addr - $remote_user [$time_local] '
                       '"$request" $status  $body_bytes_sent "$http_referer" '
                       '"$http_user_agent" "$http_x_forwarded_for"';
    access_log    "/opt/bitnami/nginx/logs/access.log" main;
    add_header    X-Frame-Options SAMEORIGIN;

    client_body_temp_path  "/opt/bitnami/nginx/tmp/client_body" 1 2;
    proxy_temp_path        "/opt/bitnami/nginx/tmp/proxy" 1 2;
    fastcgi_temp_path      "/opt/bitnami/nginx/tmp/fastcgi" 1 2;
    scgi_temp_path         "/opt/bitnami/nginx/tmp/scgi" 1 2;
    uwsgi_temp_path        "/opt/bitnami/nginx/tmp/uwsgi" 1 2;

    sendfile           on;
    tcp_nopush         on;
    tcp_nodelay        off;
    gzip               on;
    gzip_http_version  1.0;
    gzip_comp_level    2;
    gzip_proxied       any;
    gzip_types         text/plain text/css application/javascript text/xml application/xml+rss;
    keepalive_timeout  65;
    ssl_protocols      TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers        HIGH:!aNULL:!MD5;
    client_max_body_size 80M;
    server_tokens off;

    absolute_redirect  off;
    port_in_redirect   off;

    include  "/opt/bitnami/nginx/conf/server_blocks/*.conf";

    # HTTP Server
    server {
        # Port to listen on, can also be set in IP:PORT format
        listen  8080;

        include  "/opt/bitnami/nginx/conf/bitnami/*.conf";

        location /status {
            stub_status on;
            access_log   off;
            allow 127.0.0.1;
            deny all;
        }
    }
}
f87krz0w

f87krz0w1#

在类似的情况下,位置块中的这条线解决了该问题

proxy_http_version 1.1;

看起来像gzip'艾德响应与http2不兼容

相关问题