Definition on Nginx Version
NGINX version is defined as a way to categorize unique states of NGINX as and when features within NGINX is developed and released and typically the newer state differs from the earlier version in certain aspects that are mentioned in the release notes. Now, NGINX, pronounced as “engine x” is open-source software that is used as a proxy server for mails and reverse proxying & load balancing for HTTP, TCP, and UDP servers. This open-source software was written to solve C10K problem, a problem that occurred to web servers at that time to handle more than 10K simultaneous connections. In this article, we will understand the versions that have been released in past years!
Explain each NGINX version?
In NGINX version control nomenclature, we mostly see 3 types of versions namely:
- Mainline: This version is a branch that is dedicated to any new feature launch along with all bug fixes that are completed with a time-based release process. This is generally the most stable branch as all the bug fixes from the Stable version are finally ported into this mainline. Generally, the official website of NGINX claims that changes in made in the mainline branch, in terms of feature addition, might affect operation of any third-party modules.
- Stable: Though the name constitutes the word “stable” it is not really true that this version will be more reliable or bug free version, and hence mainline is considered as the most stable version. One can think this version to be a fork of the mainline version and once the changes are done, it is relayed back to mainline version again. In this version type there is no new feature that is added and only bug fixes that are major are committed to the version. Also, the official website of NGINX mentions that changes to the stable branch will not hamper operation of any of the third-party modules.
- Legacy: Legacy versions are all the prior versions that were sometime in past known as mainline versions.
Now the important question to answer here is which branch should one use when one is looking for using NGINX. Again, according to the official page it is always recommended to deploy the mainline version. Also, there might be conditions of using third-party repository where one would not have any control over the version of NGINX that is deployed and thus not able to keep pace with the mainline or stable branches. Thus, one is again recommended to install NGINX from official repository to keep up with the pace of change of NGINX!
Now let us look at the current Mainline and Stable versions of NGINX and then potentially look for some important legacy versions of NGINX.
1. Mainline Version
At the time of writing this article, 1.19.6 is the version in purview. This version was released on 15 Dec 2020. Particularly in this version, there were 4 major bug fixes that were undertaken namely:
- In cases of a server inside upstream block being marked down, one would still get “no live upstream”.
- In case of HTTPS being used, a segmentation fault might occur in the worker process.
- Some specific type of requests yielded 400 bad response.
- Bug fixes in 2 modules namely ngx_http_flv_module and ngx_http_mp4_module was made.
But as a part of 1.19.x releases there were a lot of features added, out of which some of the important ones we would discuss here.
- Incorporating a -e switch.
- Possibility of incorporating same source files in different modules while addon modules are built.
- Incorporation of various directives like “ssl_conf_command”, “proxy_ssl_conf_command” and few such more!
- Inclusion of validation of client certificate using OCSP.
- Feature to start closing of all the keepalive connections when all the free worker nodes are exhausted and simultaneously logs a warning on this to the error log.
2. Stable Version
At the time of writing this article, the stable branch is 1.18.0. As this is just the start of the 1.18.x series, no major bug fix was a part of this except this version being forked from 1.17.x mainline version. This stable version saw:
- Inclusion of dry run mode in limit_req and limit_conn
- Inclusion of support of variables in directives like limit_rate, limit_rate_after, and grpc_pass.
- Inclusion of auth_delay directive which delays any processing of the unauthorized request tagged with 401 response code and thus help in preventing timing attacks. This attack generally occurs when access is limited by password.
3. Legacy Version
Talking about age-old legacy might not make much sense, but some of the recent ones and the features those versions incorporated will help us visualize how NGINX has evolved over time.
- nginx 1.16.1: In relation to a legacy version, some major break through features were added, like in incorporating features in terms of security, to solve a problem of when we use an HTTP/2 it caused excessive memory and CPU consumption.
- nginx 1.15.10: Prior to this release only first address was used for creation of listening sockets, but in this release, it was made sure that when a hostname is being used in “listen” directive, listening sockets are created for all addresses of the hostname.
- nginx 1.15.6: When a specially crafted mp4 file is processed with ngx_http_mp4_module, it used to result in memory disclosure, and hence a feature was released in order to tackle this problem.
- nginx 1.13.11: After release of this version, a parameter in “listen” directive started supporting PROXY protocol version 2.
- nginx 1.13.10: Major advancements in terms of using clock_gettime as a feature was used in order to handle and avoid timeouts that used to get incorrectly triggered because of system time changes.
In this article, we have got a flavor of all the versions that have contributed to the success of NGINX which it now enjoys. There reason we stuck to some versions is to understand the level of transformation this software has undergone and give a sense that NGINX will go under a change in order to keep itself abreast to the latest times! Lastly, experimental floor is open to readers.
This is a guide to Nginx Version. Here we discuss the introduction, types of 3 versions of Nginx respectively. You may also have a look at the following articles to learn more –