Latest development in branch 1.23 (Mainline)
1.23.4
Released 28 Mar 2023
(3 years ago)
SoftwareNGINX OSS
Version1.23 (Mainline)
Status
End of life
Initial release1.23.0
21 Jun 2022
(3 years ago)
Latest release1.23.4
28 Mar 2023
(3 years ago)
End of security fixes23 May 2023
(Ended 3 years ago)
Release noteshttps://nginx.org/en/CHANGES
Source codehttps://github.com/nginx/nginx/tree/release-1.23.0
Documentationhttps://nginx.org/en/docs/
NGINX OSS 1.23 (Mainline) ReleasesView full list

What Is New in NGINX 1.23

NGINX 1.23 introduces several key updates focused on HTTP/2 performance, enhanced logging, and core improvements. This release continues to refine the proxy experience and streamline server operations.

Category Key Changes
New Features Directive for HTTP/2 max concurrent streams, QUIC experimental module support
Improvements SSL shutdown handling, more detailed SSL error logging, limit_req status code change
Bug Fixes Resolver, HTTP/2, SSL, and memory pool issues

How does HTTP/2 performance get better in 1.23?

The new http2_max_concurrent_streams directive gives you precise control over concurrency within an HTTP/2 connection. Before this, you could only set this limit globally at the OS level. This matters because it allows for more granular tuning on a per-server or per-location basis, preventing a single client from monopolizing connection resources and leading to a more balanced load distribution.

What logging enhancements were made?

SSL error logging is now significantly more detailed. The ssl_verify_client directive logs the specific verification failure reason instead of just a generic error. In practice, this means you no longer have to guess why a client certificate was rejected-you get the exact OpenSSL error code, which drastically cuts down debugging time for mTLS and other secure client authentication setups.

Were there any changes to rate limiting?

Yes, the status code returned by the limit_req module upon rate limit failure has been changed from 503 (Service Unavailable) to 429 (Too Many Requests). This is a much more semantically correct response that clients and APIs expect. It helps monitoring systems and client applications properly identify and handle rate limiting without confusing it with a server-side failure.

What core improvements should I know about?

The handling of SSL shutdown operations was improved for better robustness. A fix was also implemented for a bug where memory pools might not be freed under certain conditions in the resolver subsystem, which could lead to gradual memory growth over time. These are the kind of deep, stability-focused fixes that improve long-term uptime.

Is QUIC/HTTP3 supported in this release?

NGINX 1.23 includes an experimental QUIC/HTTP3 implementation. It's important to understand this is not yet production-ready and is provided for testing and evaluation purposes. You must compile NGINX with the --with-http_v3_module configure option to enable it, as it's not included in the standard builds.

FAQ

Why did NGINX change the limit_req status code from 503 to 429?
Using 429 (Too Many Requests) is the standard, correct HTTP response code for rate limiting. The old 503 code incorrectly suggested a server error, which could mislead monitoring systems and client applications.

How do I use the new http2_max_concurrent_streams directive?
You can set it within a http, server, or location block. For example: http2_max_concurrent_streams 128;. This gives you more granular control than the system-level http2_max_concurrent_streams setting.

What kind of SSL errors are now logged in more detail?
The enhanced logging specifically applies to client certificate verification failures triggered by ssl_verify_client. You'll now see the precise OpenSSL error code explaining why a certificate was rejected, such as a revoked cert or an invalid CA.

Is it safe to use the experimental QUIC module in production?
No, the QUIC implementation is explicitly marked as experimental. It's intended for development and testing environments only. Do not deploy it on critical production systems expecting stability.

What was the memory pool issue fixed in the resolver?
A bug prevented memory from being freed in certain scenarios when using the resolver directive. This fix prevents a potential slow memory leak that could occur over an extended period of time under specific conditions.

Releases In Branch 1.23 (Mainline)

VersionRelease date
1.23.428 Mar 2023
(3 years ago)
1.23.321 Jun 2022
(3 years ago)
1.23.221 Jun 2022
(3 years ago)
1.23.121 Jun 2022
(3 years ago)
1.23.021 Jun 2022
(3 years ago)