2018
Unit 1.7 Released
Hi,
I’m glad to announce a new release of NGINX Unit.
This is a bugfix release with a primary focus on the stabilization of the Node.js module. We have made great progress with it, and now Node.js support is in much better shape than before.
Changes with Unit 1.7 20 Dec 2018
*) Change: now rpath is set in Ruby module only if the library was not
found in default search paths; this allows to meet packaging
restrictions on some systems.
*) Bugfix: "disable_functions" and "disable_classes" PHP options set via
Control API did not work.
*) Bugfix: Promises on request data in Node.js were not triggered.
*) Bugfix: various compatibility issues with Node.js applications.
*) Bugfix: a segmentation fault occurred in Node.js module if
application tried to read request body after request.end() was
called.
*) Bugfix: a segmentation fault occurred in Node.js module if
application attempted to send header twice.
*) Bugfix: names of response header fields in Node.js module were
erroneously treated as case-sensitive.
*) Bugfix: uncatched exceptions in Node.js were not logged.
*) Bugfix: global install of Node.js module from sources was broken on
some systems; the bug had appeared in 1.6.
*) Bugfix: traceback for exceptions during initialization of Python
applications might not be logged.
*) Bugfix: PHP module build failed if PHP interpreter was built with
thread safety enabled.
Highly likely, this is the last release of Unit in 2018, so I would like to wish you a Happy New Year on the behalf of the entire Unit team.
2018 was an exciting year in Unit development. Many important features have been introduced, including:
-
Advanced Process Management, which allows scaling application processes dynamically depending on the amount of load. Thanks go to Maxim Romanov who primarily worked on this feature.
Documentation: https://docs.nginx.com/nginx-unit/configuration/#process-management
-
Perl, Ruby, and Node.js application support. Thanks to Alexander Borisov who implemented these language modules.
-
TLS support and Certificates Storage API that allows to dynamically configure TLS certificates. Thanks to Igor Sysoev who collaborated with me on this feature.
Documentation: https://docs.nginx.com/nginx-unit/certificates/
-
C API language modules were moved into a separate library; this helped a lot with Node.js integration and aids the upcoming Java support. Thanks again to Maxim Romanov for this work.
-
Essential access logging support. Documentation: https://docs.nginx.com/nginx-unit/configuration/#access-log
-
Advanced settings for applications including environment variables, runtime arguments, PHP options, and php.ini path customization.
I can’t imagine releasing any of these features without the effort of our QA engineer, Andrey Zelenkov, who relentlessly improves test coverage of Unit codebase, runs various fuzzing tests, and reports any suspicious behaviour to the developers.
In addition, one of the most important achievements of the year was a tangible improvement of documentation quality. The unit.nginx.org website is up-to-date now and covers all the features introduced in the new and previous Unit releases. This duty was successfully carried out by our technical writer, Artem Konev.
Besides, he continues refactoring the documentation and plans to introduce HowTos for various use cases and applications. If you have any particular suggestions concerning applications you’d like to configure with Unit, please create a feature request in our documentation issue tracker on GitHub: https://github.com/nginx/unit-docs/issues
Thanks to our system engineers, Andrei Belov and Konstantin Pavlov, who are toiling over packages in our own repositories and images in Docker hub.
Thanks to our product manager Nick Shadrin who helps us to envision our strategy and gives excellent talks on conferences around the world. You can see him in the latest Unit demo session at NGINX Conf 2018: https://www.youtube.com/watch?v=JQZKbIG3uro
Of course, everything I’ve just mentioned wouldn’t be possible without our vibrant community; our users who are eager to move their projects to Unit; everyone who reports bugs and suggests features, guiding us to the right path. We urge everybody to participate via our mailing list at unit/at/nginx.org or on GitHub: https://github.com/nginx/unit
I gladly mention 洪志道 (Hong Zhi Dao) as one of the most active community members who not only reports bugs but also reads our code, asks pointed questions, and regularly sends patches with improvements. Thank you very much for your contribution.
Special thanks go to the maintainers of Unit packages in various community repositories: Sergey A. Osokin (FreeBSD), Ralph Seichter (Gentoo), André Klitzing (Alpine Linux), and Julian Brost (Arch Linux). Sorry if I didn’t mention anyone else who maintains Unit packages for other distributions; you can open an issue for your repository to be included in the Installation section at unit.nginx.org: https://github.com/nginx/unit-docs/issues
Unfortunately, we weren’t able to achieve each and every of our audacious goals this year. The development of some features is postponed until the upcoming year.
Currently, there is ongoing work on WebSocket support, the Java module, request routing, and static files serving.
We have already made good progress on the Java module. This work is underway
in a separate GitHub public repository <https://github.com/mar0x/unit>
__, so
everybody willing to run their Java applications on Unit can participate.
Many other good things and announcements about Unit will surely happen in 2019. Thank you for staying with us, and all the best.
Unit 1.6 Released
Hello,
I’m glad to announce a new release of NGINX Unit.
This release primarily focuses on improvements in Node.js module compatibility; thanks to our vibrant community, we made great progress here.
Please don’t hesitate to report any problems to:
- Github: https://github.com/nginx/unit/issues
- Mailing list: https://mailman.nginx.org/mailman/listinfo/unit
If you have installed the unit-http
module from npm, then don’t forget to update it besides Unit itself.
Detailed instructions for Node.js installation can be found here: http://unit.nginx.org/installation/#node-js
Changes with Unit 1.6 15 Nov 2018
*) Change: "make install" now installs Node.js module as well if it was
configured.
*) Feature: "--local" ./configure option to install Node.js module
locally.
*) Bugfix: Node.js module might have crashed due to broken reference
counting.
*) Bugfix: asynchronous operations in Node.js might not have worked.
*) Bugfix: various compatibility issues with Node.js applications.
*) Bugfix: "freed pointer is out of pool" alerts might have appeared in
log.
*) Bugfix: module discovery didn't work on 64-bit big-endian systems
like IBM/S390x.
Unit 1.5 Released
Hello,
I’m glad to announce a new release of NGINX Unit.
This release introduces preliminary Node.js support.
Currently it lacks WebSockets, and there’s a known problem with “promises”. However, our admirable users have already started testing it even before the release: https://medium.com/house-organ/what-an-absolute-unit-a36851e72554
Now it even easier, since Node.js package is published in npm: https://www.npmjs.com/package/unit-http
So feel free to try it and give us feedback on:
- Github: https://github.com/nginx/unit/issues
- Mailing list: https://mailman.nginx.org/mailman/listinfo/unit
We will continue improving Node.js support in future releases.
Among other features we are working on right now: WebSockets, Java module, flexible request routing, and serving of static media assets.
Changes with Unit 1.5 25 Oct 2018
*) Change: the "type" of application object for Go was changed to
"external".
*) Feature: initial version of Node.js package with basic HTTP
request-response support.
*) Feature: compatibility with LibreSSL.
*) Feature: --libdir and --incdir ./configure options to install libunit
headers and static library.
*) Bugfix: connection might be closed prematurely while sending
response; the bug had appeared in 1.3.
*) Bugfix: application processes might have stopped handling requests,
producing "last message send failed: Resource temporarily
unavailable" alerts in log; the bug had appeared in 1.4.
*) Bugfix: Go applications didn't work when Unit was built with musl C
library.
Unit 1.4 Released
Hello,
I’m glad to announce a new release of NGINX Unit.
The key feature of the new version is dynamically configurable TLS support with certificate storage API that provides detailed information about your certificate chains, including common and alternative names as well as expiration dates.
See the documentation for details: https://docs.nginx.com/nginx-unit/certificates/
This is just our first step in TLS support. More configuration options and various TLS-related features will be added in the future.
Full-featured HTTP/2 support is also in our sights.
Changes with Unit 1.4 20 Sep 2018
*) Change: the control API maps the configuration object only at
"/config/".
*) Feature: TLS support for client connections.
*) Feature: TLS certificates storage control API.
*) Feature: Unit library (libunit) to streamline language module
integration.
*) Feature: "408 Request Timeout" responses while closing HTTP
keep-alive connections.
*) Feature: improvements in OpenBSD support. Thanks to David Carlier.
*) Bugfix: a segmentation fault might have occurred after
reconfiguration.
*) Bugfix: building on systems with non-default locale might be broken.
*) Bugfix: "header_read_timeout" might not work properly.
*) Bugfix: header fields values with non-ASCII bytes might be handled
incorrectly in Python 3 module.
In a few weeks, we are going to add preliminary Node.js support. It’s almost ready; our QA engineers are already testing it.
Now we are also working on Java module, WebSockets support, flexible request routing, and serving of static media assets.
Please also welcome Artem Konev, who joined our team as a technical writer. He has already started improving documentation on the website and updated it with the configuration options currently available: https://github.com/nginx/unit-docs/
Of course, the website still leaves much to be desired, so Artem will strive to provide industry-grade documentation for Unit. You are welcome to join this effort with your ideas, suggestions, and edits: just send a pull request or open an issue in our documentation repository on GitHub: https://github.com/nginx/unit-docs/
Stay tuned!
Unit 1.3 Released
Hello,
I’m glad to announce a new release of NGINX Unit.
Changes with Unit 1.3 13 Jul 2018
*) Change: UTF-8 characters are now allowed in request header field
values.
*) Feature: configuration of the request body size limit.
*) Feature: configuration of various HTTP connection timeouts.
*) Feature: Ruby module now automatically uses Bundler where possible.
*) Feature: http.Flusher interface in Go module.
*) Bugfix: various issues in HTTP connection errors handling.
*) Bugfix: requests with body data might be handled incorrectly in PHP
module.
*) Bugfix: individual PHP configuration options specified via control
API were reset to previous values after the first request in
application process.
Here’s an example configuration with new parameters:
{
"settings": {
"http": {
"header_read_timeout": 30,
"body_read_timeout": 30,
"send_timeout": 30,
"idle_timeout": 180,
"max_body_size": 8388608
}
},
"listeners": {
"127.0.0.1:8034": {
"application": "mercurial"
}
},
"applications": {
"mercurial": {
"type": "python 2",
"module": "hgweb",
"path": "/data/hg"
}
}
}
All timeouts values are specified in seconds. The max_body_size
value is specified in bytes.
Please note that the parameters of the http
object in this example are set to their default values. So, there’s no need to set them explicitly if you are happy with the values above.
Binary Linux packages and Docker images are available here:
- Packages: https://docs.nginx.com/nginx-unit/installation/#official-packages
- Docker: https://hub.docker.com/r/nginx/unit/tags/
Also, please follow our blog posts to learn more about new features in the recent versions of Unit: https://www.nginx.com/blog/tag/nginx-unit/
Unit 1.2 Released
Hello,
I’m glad to announce a new release of NGINX Unit.
Changes with Unit 1.2 07 Jun 2018
*) Feature: configuration of environment variables for application
processes.
*) Feature: customization of php.ini path.
*) Feature: setting of individual PHP configuration options.
*) Feature: configuration of execution arguments for Go applications.
*) Bugfix: keep-alive connections might hang after reconfiguration.
Here’s an example of new configuration parameters of application objects:
{
"args-example": {
"type": "go",
"executable": "/path/to/compiled/go/binary",
"arguments": ["arg1", "arg2", "arg3"]
},
"opts-example": {
"type": "php",
"root": "/www/site",
"script": "phpinfo.php",
"options": {
"file": "/path/to/php.ini",
"admin": {
"memory_limit": "256M",
"variables_order": "EGPCS",
"short_open_tag": "1"
},
"user": {
"display_errors": "0"
}
}
},
"env-example": {
"type": "python",
"path": "/www/django",
"module": "wsgi",
"environment": {
"DB_ENGINE": "django.db.backends.postgresql_psycopg2",
"DB_NAME": "mydb",
"DB_HOST": "127.0.0.1"
}
}
}
Please note that environment
can be configured for any type of application.
Binary Linux packages and Docker images are available here:
- Packages: https://docs.nginx.com/nginx-unit/installation/#official-packages
- Docker: https://hub.docker.com/r/nginx/unit/tags/
Unit 1.1 Released
Hello,
I’m glad to announce a new release of NGINX Unit. This is mostly a bugfix release with stability and compatibility improvements.
Changes with Unit 1.1 26 Apr 2018
*) Bugfix: Python applications that use the write() callable did not
work.
*) Bugfix: virtual environments created with Python 3.3 or above might
not have worked.
*) Bugfix: the request.Read() function in Go applications did not
produce EOF when the whole body was read.
*) Bugfix: a segmentation fault might have occurred while access log
reopening.
*) Bugfix: in parsing of IPv6 control socket addresses.
*) Bugfix: loading of application modules was broken on OpenBSD.
*) Bugfix: a segmentation fault might have occurred when there were two
modules with the same type and version; the bug had appeared in 1.0.
*) Bugfix: alerts "freed pointer points to non-freeble page" might have
appeared in log on 32-bit platforms.
A half of these issues were reported on GitHub by our users. Thank you all for helping us make Unit better.
If you have encountered a problem with Unit or have any ideas for improvements, please feel free to share here:
- Mailing list: https://mailman.nginx.org/mailman3/lists/unit.nginx.org/
- GitHub: https://github.com/nginx/unit/issues
Unit 1.0 Released
Hello,
I’m happy to congratulate you on the International Day of Human Space Flight and glad to announce the release of NGINX Unit 1.0.
Changes with Unit 1.0 12 Apr 2018
*) Change: configuration object moved into "/config/" path.
*) Feature: basic access logging.
*) Bugfix: 503 error occurred if Go application did not write response
header or body.
*) Bugfix: Ruby applications that use encoding conversions might not
work.
*) Bugfix: various stability issues.
With this release Unit ends its beta period. If you wish to know more about the project and our plans, please read the announcement blog post: https://www.nginx.com/blog/nginx-unit-1-0-released/
Unit Beta 0.7 Released
Hello,
I’m glad to announce a new beta of NGINX Unit with a number of bugfixes and Ruby/Rack support. Now you can easily run applications like Redmine with Unit.
The full list of supported languages today is PHP, Python, Go, Perl, and Ruby. More languages are coming.
Changes with Unit 0.7 22 Mar 2018
*) Feature: Ruby application module.
*) Bugfix: in discovering modules.
*) Bugfix: various race conditions on reconfiguration and during
shutting down.
*) Bugfix: tabs and trailing spaces were not allowed in header fields
values.
*) Bugfix: a segmentation fault occurred in Python module if
start_response() was called outside of WSGI callable.
*) Bugfix: a segmentation fault might occur in PHP module if there was
an error while initialization.
Binary Linux packages and Docker images are available here:
- Packages: https://docs.nginx.com/nginx-unit/installation/#precompiled-packages
- Docker: https://hub.docker.com/r/nginx/unit/tags/
Packages and images for the new Ruby module will be built next week.
Unit Beta 0.6 Released
Hello,
I’m glad to announce a new beta of NGINX Unit with advanced process management and Perl/PSGI support. One of the Perl applications that has been tested is Bugzilla, and it runs with Unit flawlessly.
Here is a changes log of 0.5 and 0.6 versions:
Changes with Unit 0.5 08 Feb 2018
*) Change: the "workers" application option was removed, the "processes"
application option should be used instead.
*) Feature: the "processes" application option with prefork and dynamic
process management support.
*) Feature: Perl application module.
*) Bugfix: in reading client request body; the bug had appeared in 0.3.
*) Bugfix: some Python applications might not work due to missing
"wsgi.errors" environ variable.
*) Bugfix: HTTP chunked responses might be encoded incorrectly on 32-bit
platforms.
*) Bugfix: infinite looping in HTTP parser.
*) Bugfix: segmentation fault in router.
Changes with Unit 0.6 09 Feb 2018
*) Bugfix: the main process died when the "type" application option
contained version; the bug had appeared in 0.5.
The announcement of 0.5 was skipped as a serious regression was found right after the packages were built and published.
Besides the precompiled packages for CentOS, RHEL, Debian, Ubuntu, and Amazon Linux, now you can try Unit using official Docker containers. See the links below for details:
- Packages: https://docs.nginx.com/nginx-unit/installation/#precompiled-packages
- Docker: https://hub.docker.com/r/nginx/unit/tags/
Unit Beta 0.4 Released
Hello,
I’m glad to announce a new beta of NGINX Unit. This is mostly a bugfix release in order to eliminate significant regressions in the previous version.
Changes with Unit 0.4 15 Jan 2018
*) Feature: compatibility with DragonFly BSD.
*) Feature: "configure php --lib-static" option.
*) Bugfix: HTTP request body was not passed to application; the bug had
appeared in 0.3.
*) Bugfix: HTTP large header buffers allocation and deallocation fixed;
the bug had appeared in 0.3.
*) Bugfix: some PHP applications might not work with relative "root"
path.
You can find links to the source code and precompiled Linux packages here: https://docs.nginx.com/nginx-unit/installation/
Internally, we use Buildbot to build each commit and run tests on a large number of systems. We also use various static analysis tools to improve code quality and check test coverage.
There is ongoing work on a functional tests framework that will allow us to avoid such regressions in the future. And there are plans to add fuzz testing.
You can learn more about recent Unit changes in this detailed blog post: https://www.nginx.com/blog/unit-0-3-beta-release-available-now/
Besides that, please welcome Alexander Borisov, who’s joined our Unit dev team today. His first task is going to be adding Perl/PSGI support.