Skip to content

Expose nginx large_client_header_buffers as a BOSH property on cloud_controller_ng #669

Description

@nabramovitz

Feature request

Expose nginx's large_client_header_buffers as a BOSH property on the cloud_controller_ng job.

Context

CF v3 encourages guid-list filters on list endpoints (guids=, space_guids=, organization_guids=, user_guids=, ...). Clients that resolve or enrich entities in bulk legitimately build long request URIs — 200 guids is already ~7.5KB encoded.

jobs/cloud_controller_ng/templates/nginx.conf.erb does not set large_client_header_buffers, so CC's fronting nginx runs the compiled default (4 8k): request lines over ~8KB are rejected with 414 Request-URI Too Large before reaching Cloud Controller. There is no BOSH property to change this — an operator who needs wider filter URIs has to fork the job template.

Client-side impact precedent: cloudfoundry/cli#2220 (cf routes failing with 414 on /v3/apps?guids= for larger foundations; the v8 fix batches at 200 guids per request). Stratos hits the same wall (cloudfoundry/stratos#5579).

Proposal

Add a property, e.g.:

cc.nginx_large_client_header_buffers:
  description: "Value for nginx large_client_header_buffers (number and size of buffers for large request headers, including the request line). nginx default is '4 8k'."
  default: "4 8k"

rendered into the http block of nginx.conf.erb. This follows the pattern of the request-shaping knobs already exposed there (cc.client_max_body_size, cc.nginx_rate_limit_general, cc.nginx_rate_limit_zones).

Notes for the docs/description

  • The next wall is puma's query-string parser cap (10KB, PUMA_QUERY_STRING_MAX_LENGTH), so the useful range for this property without also touching puma is roughly 8k-10k.
  • The effective limit a client experiences is the minimum across every hop in front of CC (edge load balancers, proxies, gorouter, this nginx). It would help operators if the property description says this plainly — raising CC's buffer only helps if the rest of the chain also allows longer request lines.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions