Обратный прокси-сервер Nginx переупаковывает фрагментированные ответы

Я бегу nginx/1.1.19:

# nginx -V
nginx version: nginx/1.1.19
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-debug --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-http_xslt_module --with-ipv6 --with-sha1=/usr/include/openssl --with-md5=/usr/include/openssl --with-mail --with-mail_ssl_module --add-module=/build/buildd/nginx-1.1.19/debian/modules/nginx-auth-pam --add-module=/build/buildd/nginx-1.1.19/debian/modules/nginx-echo --add-module=/build/buildd/nginx-1.1.19/debian/modules/nginx-upstream-fair --add-module=/build/buildd/nginx-1.1.19/debian/modules/nginx-dav-ext-module

Я использую его для обратного прокси-сервиса, который может передавать данные в виде фрагментированного ответа. Каждый чанк из серверной службы является допустимым документом JSON, но при обращении к нему через прокси-сервер nginx чанки переупаковываются в "круглые" размеры, такие как 0x1000, 0x2000, 0x4000 и т. Д. Это делает чанки больше не действительными BLOB-объектами, поскольку у каждого чанка будет конец одного документа в начале и начало другого документа в конце.

мой location блок настроен так:

    location / {
            proxy_pass http://backend;
            proxy_read_timeout 600;
            proxy_buffering off;
    }

Я думал, что proxy_buffering off; часть должна избегать поведения, которое я вижу. Есть ли какие-то другие настройки, которые мне нужно изменить?

1 ответ

Вы никогда не должны связывать свои бизнес-данные с кусками. Размер чанка может быть изменен прокси или событием различными веб-серверами. Даже некоторые прокси, основанные на некоторых эвристиках, могут объединять фрагменты. Ваш анализатор чанков (клиентский SDK, если он у вас есть и т. Д.) Должен иметь возможность анализировать ваши данные, даже если каждый чанк имеет часть JSON или 1.5 JSON или несколько JSON.

Другие вопросы по тегам