Skip to main content
GrN.dk

Main navigation

  • Articles
  • Contact
  • Your Digital Project Manager
  • About Greg Nowak
  • Services
  • Portfolio
  • Container
    • Excel Freelancer
    • Kubuntu - tips and tricks
    • Linux Apache MySQL and PHP
    • News
    • Image Gallery
User account menu
  • Log in

Breadcrumb

  1. Home

NGINX 1.30 changed upstream connection reuse by default: what to check before you upgrade

By Greg Nowak. Last updated 2026-06-18.

As of June 17, 2026, NGINX lists 1.30.3 as the current stable release. The behavior change that matters here arrived earlier: mainline 1.29.7 on March 24, 2026 switched HTTP proxying to HTTP/1.1 with upstream keep-alive by default, and stable 1.30.0 brought that into the long-lived branch on April 14, 2026. That is good news for latency and time to first byte. It is also the point where a routine package update becomes a small compatibility review.

If you run client sites, legacy apps, vendor platforms, or a mixed agency estate, the main risk is not that NGINX suddenly became unreliable. The risk is that old backends and inherited config were quietly built around fresh TCP connections for each request. Reused upstream connections can expose brittle authentication flows, connection-scoped assumptions, or copied directives that nobody has reviewed in years.

If your setup looks like this Default move What to verify
Standard HTTP web app Keep the new default Latency, error rate, and backend connection counts
Shared upstream block across several locations Review explicit keepalive settings Whether reuse should stay local or be shared
NTLM or Negotiate authentication Test before rollout Whether auth context depends on a stable upstream connection
Legacy app expects fresh connections Use a narrow HTTP/1.0 downgrade That only the affected path loses keep-alive
Interest in Early Hints Ship separately That only capable clients receive 103 responses
A quick decision matrix for planning an NGINX 1.30 upgrade.

What actually changed

NGINX's own release notes are clear: 1.29.7 changed the default proxy HTTP version to 1.1 with keep-alive enabled, and 1.30.0 carried that into stable. The current proxy module docs show proxy_http_version 1.1 as the default, while the upstream module now documents keepalive 32 local as the default cache of idle upstream connections per worker. In plain English, connection reuse is now normal behavior, not an optional tuning trick.

That does not mean every old keep-alive snippet is wrong. It means you should stop treating inherited snippets as automatically correct. The same upstream docs note that an explicit keepalive 32 behaves differently from the new default keepalive 32 local: without local, cached connections can be shared across locations that hit the same upstream address. In a shared estate, that deserves deliberate review.

Where teams usually get caught

  • Legacy vendor apps or older in-house services that behave differently when several requests arrive over one TCP connection.
  • Authentication paths, especially NTLM or Negotiate flows, where NGINX documents that the upstream connection can be bound to the client connection to preserve authentication context.
  • Shared upstream blocks reused by public pages, admin paths, or APIs with different expectations.
  • Old snippets such as proxy_http_version 1.1; and proxy_set_header Connection ""; that were copied years ago and never revisited after the default changed.
  • Blind tuning of keepalive as if it were a hard connection cap. NGINX explicitly warns that it only limits idle cached connections per worker, not total upstream connections.

Audit first, then change config

Start with the effective configuration, not just the files you remember editing. On estates with includes, templates, or generated config, nginx -T is the fastest way to see what is really live.

nginx -T 2>/dev/null | rg -n 'proxy_http_version|proxy_set_header Connection|keepalive|ntlm|early_hints'
rg -n 'proxy_http_version|proxy_set_header Connection|keepalive|ntlm|early_hints' /etc/nginx

Any proxy_set_header line is worth reading carefully because those directives are only inherited when the current block defines none. One copied override can change more than teams expect.

From that inventory, answer five practical questions before you schedule the maintenance window:

  • Which upstreams are HTTP proxy targets, and which are FastCGI, uwsgi, or SCGI paths with different rules?
  • Where are you still forcing proxy_http_version 1.0 or 1.1 explicitly?
  • Which shared upstream blocks declare keepalive without local?
  • Which routes carry awkward authentication, old vendor software, or long-running admin tasks?
  • What will you watch during canary rollout: 502s, auth retries, backend connection counts, idle socket growth, and response time changes?

What to change, and what to leave alone

If an old snippet was added only to enable HTTP/1.1 keep-alive on pre-1.29.7 NGINX, it may now be redundant. Do not mass-delete it in production without testing, but do challenge it. The goal is a config that reflects present intent, not a copied habit from an older NGINX era.

If a backend genuinely requires the older behavior, keep the downgrade narrow and local to that path:

location /legacy-app/ {
    proxy_pass http://legacy_backend;
    proxy_http_version 1.0;
    proxy_set_header Connection "Close";
}

For modern backends, the default behavior is usually the right one. Where you do need explicit tuning, work with the current upstream controls: keepalive, keepalive_requests, keepalive_time, and keepalive_timeout. If you keep an explicit keepalive directive on shared upstream blocks, choose local-only reuse or broader sharing on purpose, not by accident.

The same release train also brought Early Hints into stable. Treat that as a separate feature flag. NGINX's Early Hints guidance says proxying 103 responses is off by default and shows a pattern for limiting them to likely-capable clients, commonly HTTP/2 and HTTP/3 first. Older HTTP/1.1 clients can misparse an unexpected 103 response, so it is better not to bundle that experiment into the same rollout unless you have time to test it properly.

A safe rollout looks boring, and that is the point

The sensible path is to upgrade to the latest stable 1.30.x release, not 1.30.0 specifically, stage the config cleanup, and canary the traffic that is most likely to break first. For most teams that means admin routes, authentication paths, and older line-of-business apps before high-volume brochure pages. If the estate spans client work, vendor software, and multiple inherited NGINX patterns, this is exactly the kind of change that benefits from a short audit and a written rollout plan.

If you want a second set of eyes on that review, Greg can map the effective proxy path, identify the places that should stay on older behavior, and help you remove stale config without losing the performance upside NGINX intended. Talk to Greg about an NGINX upgrade review.

Related on GrN.dk

  • WordPress 7.0 Collaboration Readiness: Why Legacy Meta Boxes and Hosting Assumptions Can Still Stall Your Upgrade
  • Drupal 10 Has a December 2026 Deadline, So Upgrade Inventory Has Become a Real Client Project
  • Apache 2.4.67 Put Legacy Reverse Proxies Back on the Risk List

Need help with this kind of work?

Talk to Greg about an NGINX upgrade review Get in touch with Greg.

Sources

  • nginx news: 2026
  • Keep-alive to upstreams is now default in NGINX 1.29.7
  • Module ngx_http_upstream_module
  • Module ngx_http_proxy_module
  • NGINX Introduces Support for 103 Early Hints
Last modified
2026-06-19

Tags

  • Nginx
  • backend compatibility
  • Performance
  • Server Ops

Review Greg on Google

Greg Nowak Google Reviews

 

Illustrated infographic summarizing: If the Facts Need JavaScript, AI Search May Miss the Full Page
If the Facts Need JavaScript, AI Search May Miss the Full Page
2026-07-14

A practical guide to finding and fixing JavaScript rendering gaps that can hide services, prices, contact details and metadata from AI search crawlers.

Illustrated infographic summarizing: Search Console Can See Social Posts—Your Reports Need a New Map
Search Console Can See Social Posts—Your Reports Need a New Map
2026-07-13

Search Console now reports how social posts perform across Google. Here’s a practical way to manage properties, permissions, baselines and exports.

Illustrated infographic summarizing: WordPress 7.0 Has an AI Client. Plugins Need Their Own Guardrails
WordPress 7.0 Has an AI Client. Plugins Need Their Own Guardrails
2026-07-12

WordPress 7.0 standardizes how plugins call AI providers, while leaving developers responsible for access control, cost limits, capability checks and graceful failures.

Illustrated infographic summarizing: Google’s AI Search toggle needs a test plan, not a gut decision
Google’s AI Search toggle needs a test plan, not a gut decision
2026-07-11

Google’s AI Search control creates a measurable publishing choice. Test visibility, traffic and leads before changing the setting across your site.

Illustrated infographic summarizing: OpenAI Is Retiring Agent Builder: Save the Workflow, Not Just Prompts
OpenAI Is Retiring Agent Builder: Save the Workflow, Not Just Prompts
2026-07-10

OpenAI retires Agent Builder on November 30, 2026. Here is what teams need to preserve, how to choose a migration path, and how to cut over safely.

Illustrated infographic summarizing: AI agents need a browser policy before they start clicking around
AI agents need a browser policy before they start clicking around
2026-07-09

Browser-using AI agents can save time, but they need clear rules before they enter CRMs, CMSs, portals, or admin tools and start taking action.

Illustrated infographic summarizing: When AI writes JSON, one bad field can break the workflow
When AI writes JSON, one bad field can break the workflow
2026-07-08

Structured AI output is useful in real workflows, but teams need schemas, validation, retries, and logs before JSON reaches production systems.

Illustrated infographic summarizing: AI search is eating the click: measure the queries before rewriting pages
AI search is eating the click: measure the queries before rewriting pages
2026-07-07

AI summaries are cutting into search clicks. Start with a practical dashboard that shows query risk, bot purpose, page value, and crawler policy.

Illustrated infographic summarizing: AI shopping visibility now depends on boring product-data plumbing
AI shopping visibility now depends on boring product-data plumbing
2026-07-07

AI-assisted shopping puts more pressure on ecommerce catalog data, feeds, schema, prices, availability, and return-policy governance.

Illustrated infographic summarizing: Drupal AI Demos Need a Permissions Rehearsal Before Launch
Drupal AI Demos Need a Permissions Rehearsal Before Launch
2026-07-07

Drupal’s July 2026 AI advisories show why agencies should test permissions, uploads, approval loops, logs, and rollback before client demos go live.

More articles
RSS feed

GrN.dk web platforms, web optimization, data analysis, data handling and logistics.