Назад | Перейти на главную страницу

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-объектов JSON, поскольку каждый фрагмент будет иметь конец одного документа в начале и начало другого документа в конце.

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

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

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

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