oauth2-proxy/pkg/validation
Mateen Anjum c2a5dfa4ea
feat(upstream): add configurable transport buffer sizes for large uploads
Large PUT/POST uploads (>60MB) fail with context canceled when an nginx
reverse proxy sits in front of oauth2-proxy. The root cause is that
http.Transport inherits Go's default 4KB WriteBufferSize, requiring
~15,000 write syscalls for a 60MB upload. This generates backpressure
on the nginx->oauth2-proxy pipe. Once nginx hits proxy_read_timeout
between consecutive write ops, it closes the connection, canceling
req.Context(), which propagates as context canceled on the in-flight
RoundTrip to the upstream.

Expose writeBufferSize and readBufferSize on the Upstream config struct,
wired to transport.WriteBufferSize and transport.ReadBufferSize in
newReverseProxy. Both default to 0 (preserving current behavior, Go
uses 4KB). Setting writeBufferSize to 65536 (64KB) reduces write
syscalls by 16x and resolves the timeout correlation for large uploads.

Fixes #3389

Signed-off-by: Mateen Anjum <mateenali66@gmail.com>
2026-03-29 05:48:01 -04:00
..
allowlist.go ci: fix linter warnings for preallocation 2026-01-17 16:01:14 +01:00
allowlist_test.go chore(deps): Updated to ginkgo v2 (#2459) 2024-07-18 22:41:02 +02:00
common.go SecretSource.Value should be plain text in memory 2020-12-01 08:56:46 +00:00
common_test.go revert: secrets as []byte instead of string 2025-11-16 22:38:42 +01:00
cookie.go feat(cookie): add feature support for cookie-secret-file (#3104) 2025-07-22 18:59:55 +02:00
cookie_test.go feat(cookie): add feature support for cookie-secret-file (#3104) 2025-07-22 18:59:55 +02:00
header.go ci: fix linter warnings for preallocation 2026-01-17 16:01:14 +01:00
header_test.go revert: secrets as []byte instead of string 2025-11-16 22:38:42 +01:00
logging.go Fix import path for v7 (#800) 2020-09-29 17:44:42 +01:00
options.go deref everything but now with default constants 2025-11-16 22:38:56 +01:00
options_test.go refactor: ptr.Ptr to ptr.To 2025-11-16 22:38:59 +01:00
providers.go chore(deps): update gomod and golangci/golangci-lint to v2.11.4 (#3382) 2026-03-23 09:38:12 +01:00
providers_test.go feat: add support for specifying allowed OIDC JWT signing algorithms (#2753) (#2851) 2026-03-18 22:24:27 +08:00
sessions.go PKCE Support (#1541) 2022-03-13 10:08:33 +00:00
sessions_test.go adapting unit tests and fixing minor issues introduced with the derefing 2025-11-16 22:38:57 +01:00
upstreams.go feat(upstream): add configurable transport buffer sizes for large uploads 2026-03-29 05:48:01 -04:00
upstreams_test.go fix: static upstreams failing validation due to `passHostHeader` and `proxyWebSockets` defaults being set incorrectly (#3302) 2026-01-17 15:15:19 +01:00
utils.go Add validation for Headers struct 2020-11-07 17:16:54 +00:00
validation_suite_test.go chore(deps): Updated to ginkgo v2 (#2459) 2024-07-18 22:41:02 +02:00