yum upgrades for production use, this is the repository for you.
Active subscription is required.
Technical Briefing: NGINX Early Hints (HTTP 103) on Enterprise Linux
Problem Statement
HTTP Early Hints (status code 103) allows a server to send preliminary response headers—such as Link headers for render-blocking resources—before the final response, enabling browsers to begin fetching critical assets while the origin is still generating the HTML. This can significantly reduce Largest Contentful Paint (LCP) when the origin has real server-side think-time.
However, the early_hints directive, available since NGINX 1.29.0, is absent from all stock Enterprise Linux, Debian, and Ubuntu packages. Stock packages top out at 1.28.3 (even Ubuntu 26.04 LTS), causing configuration tests to fail with:
nginx: [emerg] unknown directive "early_hints"
Implementation
Installation
Enterprise Linux (EL8, EL9, EL10):
sudo dnf install https://extras.getpagespeed.com/release-latest.rpm
sudo dnf install nginx
This yields nginx-1.30.4.
APT-based systems:
The GetPageSpeed APT repository provides nginx-1.30.4 for Ubuntu jammy/noble and Debian bookworm.
How Early Hints Works in NGINX
NGINX does not generate early hints itself; it passes through 103 responses from upstream unmodified. Only proxy_pass and grpc_pass forward interim responses—FastCGI, uwsgi, and SCGI do not.
The early_hints directive is valid in http, server, and location contexts. It activates when at least one value is non-empty and not "0".
Safe Gate Configuration
To avoid HTTP/1.1 compatibility hazards per RFC 8297, use a map to send hints only on HTTP/2/3 top-level navigations:
map $http_sec_fetch_mode $early_hints {
navigate $http2$http3;
}
Buffer Configuration
Large Link sets can overflow proxy_buffer_size, causing a 502 error with upstream sent too big header. Fix:
proxy_buffer_size 32k;
proxy_buffers 8 32k;
Cumulative early hint size is also capped at proxy_buffer_size, logging upstream sent too big early hints at info level (invisible at default warn level). Note that proxy_hide_header applies to hint headers.
Benchmark Results
With 400 ms origin think-time (60 interleaved cold-cache runs):
– LCP dropped from 748 ms to 564 ms median (568 ms at p75)
With zero-delay origin:
– Measured difference is exactly 0 ms
A/A control noise floor:
– 0 ms median, 4 ms at p75
TTFB Caveat
responseStart drops from 527 ms to 125 ms with hints enabled—this is a measurement artifact, not a real speed-up. HTML arrival remains 527 ms in both arms. Judge results on LCP, not TTFB.
Best Practices
- Hint only render-blocking stylesheets and LCP images
- Avoid
srcsetcandidates (layout-dependent) and excessive hints—each competes for the connection carrying the HTML
Practical Payoff
Early hints reclaim dead time only when the origin has real think-time. With fast origins, it does nothing. Requires NGINX 1.29.0+; the GetPageSpeed repository provides 1.30.4 across EL8-10, Debian bookworm, and Ubuntu jammy/noble.
Related: GetPageSpeed Amplify
GetPageSpeed Amplify runs scheduled gixy scans tied to live NGINX metrics. It is drop-in compatible with the deprecated nginx-amplify-agent (EOL January 2026).
Read the full article: NGINX Early Hints: HTTP 103 Benchmarked on Enterprise Linux
