Unit 1.27. release

Timo Stark t.stark at f5.com
Thu Jun 2 14:33:43 UTC 2022


Hi,

We are pleased to announce NGINX Unit 1.27. This release brings a new level of maturity to Unit for serving static assets. We love using Unit as a cloud-native web server, and this release brings some missing features to this use case.

- Redirecting HTTP requests to HTTPS
- Configurable filename for path-only URIs

** Redirecting HTTP Requests to HTTPS **

Since we added TLS support and certificate management to Unit, we’ve been asked to simplify redirecting plaintext HTTP requests to the TLS-enabled listener. This is now possible by configuring the location value of a route action to contain variables. Indeed, a new variable, $request_uri, is now available that contains the path-and-query parts of the original URI, preserving any encoding needed by the browser.

A full example is provided below.

```
{
    "listeners": {
        "*:443": {
            "tls": {
                "certificate": "example.com"
            },
            "pass": "routes"
        },
        "*:80": {
            "pass": "routes"
        }
     },

    "routes": [
        {
            "match": {
                "scheme": "http"
            },
            "action": {
                "return": 301,
                "location": "https://${host}${request_uri}"
            }
        },
        ...
```


This configuration enables Unit to listen on plaintext and TLS-enabled ports, ensuring that any requests received on the plaintext port notify the browser to resubmit on the TLS-enabled port.

** Configurable Filename for Path-Only URIs **

While it is conventional for index.html to represent the resource to be served when a path-only URI is requested, i. e. one without a filename suffix, this convention is rooted in history. It comes from a time in the early 1990s when HTTP was used exclusively to index and navigate HTML pages.

You can now use a different default filename by specifying the index for a route action. A full example is provided below.

```
"routes": [
    {
        "match": {
            "uri": "/cms/*"
        },
        "action": {
            "share": "/var/cms$uri",
            "index": "default.html"
        }
    },
    {
        "action": {
            "share": "/var/www$uri"
        }
    }
]
```

This configuration enables Unit to serve default.html for path-only URIs made to /cms/* and the default index.html filename for all other path-only URIs.

** Full Changelog **

This release also includes a number of bug fixes. The full changelog can be seen below.

Changes with Unit 1.27.0                                         02 Jun 2022

    *) Feature: ability to specify a custom index file name when serving
       static files.

    *) Feature: variables support in the "location" option of the "return"
       action.

    *) Feature: support empty strings in the "location" option of the
       "return" action.

    *) Feature: added a new variable, $request_uri, that includes both the
       path and the query parts as per RFC 3986, sections 3-4.

    *) Feature: Ruby Rack environment parameter "SCRIPT_NAME" support.

    *) Feature: compatibility with GCC 12.

    *) Bugfix: Ruby Sinatra applications don't work without custom logging.

    *) Bugfix: the controller process could crash when a chain of more than
       four certificates was uploaded.

    *) Bugfix: some Perl applications failed to process the request body,
       notably with Plack.

    *) Bugfix: some Spring Boot applications failed to start, notably with
       Grails.

    *) Bugfix: incorrect Python protocol auto detection (ASGI or WSGI) for
       native callable object, notably with Falcon.

** Platform Updates **

Official packages are now available for the following Linux distributions:
- Fedora 36 (https://unit.nginx.org/installation/#fedora)
- RHEL 9 (https://unit.nginx.org/installation/#rhel)
- Ubuntu 22.04 (https://unit.nginx.org/installation/#ubuntu)

Docker images (https://unit.nginx.org/installation/#docker-images) have been updated to use the latest language versions:
- Go 1.18
- PHP 8.1
- Ruby 3.1

Community, Roadmap and Open Issues

We continue to receive valuable bug reports and feature requests to our GitHub issues page(https://github.com/nginx/unit/issues). Although we are a small team, every issue is reviewed, and we aim to respond within 2-3 days. Since the last release, we refreshed our GitHub README (https://github.com/nginx/unit#readme) with a super-quick-start guide and added contribution guidelines(https://github.com/nginx/unit/blob/master/CONTRIBUTING.md) to help you get involved. For other discussions, please join us at the #unit-users channel on the NGINX Community Slack(https://join.slack.com/t/nginxcommunity/shared_invite/zt-1aaa22w80-~_~wSMNyPxLPLp5xunOC7w).
Although this release focuses on bug fixes and web server features, we have advanced in several other projects that you can expect to see in forthcoming releases this year:

- Custom logging (which brings lots of new variables and places you can use them)
- JavaScript-in-the-configuration (already available as an experimental patch) (https://github.com/nginx/unit/issues/652)
- Statistics API to provide true observability for Unit
- CLI tool for easier command-line management of Unit

Finally, you may have noticed our new mascot, the “tribot” - we hope you like it too! If you’re lucky, you can even find a T-shirt (https://swag-nginx.com/collections/tees/products/unit-tee-straight-fit) at NGINX events this year!

Wbr, Timo & the Unit Team


More information about the unit mailing list