What Is New in NGINX 1.6
| Category | Key Changes |
|---|---|
| New Features | Dynamic module support, SPDY module replaced by HTTP/2, PROXY protocol support for mail and stream modules |
| Improvements | SSL performance enhancements, backend SSL certificate verification, hash bucket size optimization |
| Bug Fixes | Memory leak fixes, resolver behavior corrections, various core and module-specific issues resolved |
How did dynamic modules change the game in 1.6?
NGINX 1.6 introduced dynamic module loading, a fundamental shift in how extensions are handled. This meant you could compile modules separately and load them via the load_module directive without recompiling the entire NGINX binary. In practice, this dramatically simplified module management and deployment workflows for ops teams.
What's the deal with HTTP/2 replacing SPDY?
The SPDY module was officially replaced with a full HTTP/2 implementation. This wasn't just a rename; it was a move to the standardized protocol. If you were using the spdy parameter in your listen directives, you needed to update them to http2 to maintain the functionality.
How did SSL handling get better?
SSL performance saw notable gains, which was critical for high-traffic sites. The release added support for verifying backend SSL certificates using the proxy_ssl_verify and proxy_ssl_trusted_certificate directives. This provided a stronger security guarantee for upstream connections.
What other core improvements landed?
Support for the PROXY protocol was extended to the mail and stream modules, allowing those connections to pass along original client information. The hash table implementation was also optimized to automatically adjust sizes, reducing the need for manual tuning of the server_names_hash_bucket_size directive.
Other notable fixes:
- Fixed a memory leak that occurred when using the
aiodirective with sendfile. - Corrected issues with the resolver to prevent hangs during certain failure conditions.
- Resolved a bug where the
limit_connmodule might not work correctly.
FAQ
Do I need to recompile all my modules for dynamic loading?
Yes. To use the new dynamic loading feature, your third-party modules must be compiled as shared objects (.so files) using the new --add-dynamic-module configure option instead of --add-module.
My config uses 'listen ... spdy'. What happens when I upgrade?
The spdy parameter will be ignored, and the connection will fall back to HTTP/1.1. You must replace it with http2 in your listen directives to enable HTTP/2 support.
Why should I care about backend SSL certificate verification?
This closes a security gap. Before 1.6, NGINX would happily proxy to an upstream server with an invalid or self-signed certificate. Now you can enforce validation, ensuring you're talking to the legitimate backend service.
Was there a specific performance win for SSL?
Yes, the internal SSL handling was optimized. You should see reduced CPU overhead for SSL termination, which matters most for deployments serving a massive number of secure connections.
What's the main benefit of the hash bucket size change?
It removes a common source of configuration errors. NGINX now automatically adjusts the size for large server names, so you're less likely to see the "could not build the server_names_hash" error on startup.