Skip to content
This repository was archived by the owner on Mar 24, 2026. It is now read-only.

proxy-request-buffering: "off" ignored; request body is fully buffered before sending to backend #14274

@gadekrushna

Description

@gadekrushna

What happened: I am trying to implement a streaming scenario where the client sends data in chunks to the backend. I need the Ingress Controller to disable buffering and pass the chunks immediately to the backend service.

I have applied the standard proxy-request-buffering: "off" annotation, along with configuration snippets to force header passthrough. However, NGINX is still buffering the entire request body. The backend only receives the request once the client has finished transmitting the entire body.

What I expected to happen: With nginx.ingress.kubernetes.io/proxy-request-buffering: "off", NGINX should not buffer the request body. It should stream the data to the backend as it is received from the client.

How to reproduce it:

  1. Deploy a backend service that logs timestamped receipt of data chunks.
  2. Deploy an Ingress resource with the annotations listed below.
  3. Send a large file or stream data using a chunked client with HTTP1.1 and transfer encoding header as chunked.
  4. Observe that the backend receives no data until the upload is 100% complete.

Ingress Controller version: ingress-nginx-4.11.3

Kubernetes version: 1.31.11

Cloud provider: Azure AKS

Load Balancer: No load balancer present request directly comes to ingress controller

annotations:

  # 1. Disable Request Buffering (Uploads)
  nginx.ingress.kubernetes.io/proxy-request-buffering: "off"
  
  # 2. Disable Response Buffering (Downloads/Streaming back to client)
  nginx.ingress.kubernetes.io/proxy-buffering: "off"
  
  # 3. Allow unlimited body size
  nginx.ingress.kubernetes.io/proxy-body-size: "0"
  
  # 4. Increase timeouts so the stream doesn't cut off
  nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
  nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs-kindIndicates a PR lacks a `kind/foo` label and requires one.needs-priorityneeds-triageIndicates an issue or PR lacks a `triage/foo` label and requires one.

    Type

    No type

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions