NGINX Unit 1.31.0 发布,引入 Unit WebAssembly

Nginx Unit 是一个动态应用服务器,能够与 Nginx Plus 和 Nginx 开源版并行或独立运行。Nginx Unit 支持 RESTful JSON API,可以在不中断服务的情况下更改配置,并可运行基于多种语言和架构的应用。Nginx Unit 生来就是为满足分布式应用的需求而设计的,可为您的服务网格奠定坚实的基础。

Nginx Unit 1.31.0 正式发布,这是继 5 月份发布 1.30 之后的又一个重要里程碑。此版本中引入 Unit WebAssembly (WASM) 功能,代表了 Unit 功能的重大飞跃。

还带来了显着的新增功能 - 能够发送 response headers 并利用配置中 response headers 变量的功能。这些增强功能将大大增加提高灵活性和自定义选项。以及一些 bug 修复,并引入了更多改进措施,以确保无缝增强用户体验。

  • Python 支持 ASGI lifespan_state
  • unitc CLI 工具现在可对配置 URI 进行交互式编辑

Server-Side WebAssembly: Technology Preview

由于 Unit 已经为各种编程语言运行时提供了原生支持,因此在 NGINX Unit 中添加服务器端 WebAssembly 支持的挑战也就水到渠成了。

Unit 现在可以将 WebAssembly 模块作为本机应用程序类型运行。

Working with Response Headers

完全控制发送回客户端的 HTTP response headers 是社区一直在期待的功能。在 1.31 中添加了对使用 Unit 路由器添加、删除或覆盖 HTTP response headers 以及使用专用 response header 变量中的值的支持。

Set Response Headers

如上所述,你可以使用 Unit 的路由器来添加、删除或覆盖 response headers。

{
    "listeners": {
        "*:80": {
            "pass": "routes"
        }
    }
}

使用 Unit 来托管前端和 Web API。在这种情况下,语言或单元应用程序对象并不重要。当前的配置如下所示:

{
    "listeners": {
        "*:8080": {
            "pass": "routes/app"
        }
    },

    "routes": {
        "app": [
            {
                "match": {
                    "uri": [
                        "/api/*"
                    ]
                },

                "action": {
                    "pass": "applications/api"
                }
            },
            {
                "action": {
                    "share": [
                        "/var/www/frontend$uri",
                        "/var/www/frontend/index.html"
                    ]
                }
            }
        ]
    }
}

新引入的response_headers对象可以添加到任何 action对象中。该response_headers对象包含一个 key/value 对列表,每个 key/value 对定义一个 header。如果 header name 与响应中已存在的 response header 匹配,则其值将被替换。否则,将创建一个新的 response header。值null 从响应中省略 header。空字符串则不然。首先,要隐藏 X-VersionAPI 应用程序发送的 header:

{
    "action": {
        "pass": "applications/api",
        "response_headers": {
            "X-Version": null
        }
    }
}

对于前端,希望添加版本哈希来识别已部署的版本,而无需深入研究源代码:

{
    "action": {
        "share": [
            "/var/www/frontend$uri",
            "/var/www/frontend/index.html"
        ],
        "response_headers": {
            "X-FE-Version": "abc1234def"
        }
    }
}

除了 fixed values 之外,还可以调用 NJS 函数来使用一些更复杂的规则创建值。

"Upper-Case": "`${host.toUpperCase()}`"

Use Response Header Variables

在 1.31 中添加了一组新的变量来控制 response headers。当 Unit 收到来自 Unit 上托管的应用程序的响应,并且你想要根据应用程序共享的值修改现有  response headers 时,Unit 必须保留该特定值。

[
    {
        "action": {
            "pass": "applications/calc",
            "response_headers": {
                "Content-Type": "${response_header_content_type};charset=iso-8859-1"
            }
        }
    }
]

CLI 交互模式

在1.29中引入了curl的封装脚本来简化与Unit API的交互。在1.31中则为该脚本添加了交互式编辑模式:

$ unitc EDIT /config

这将在$EDITOR当前定义的编辑器中打开给定端点的 JSON 配置。在大多数情况下,这将默认为 nano。如果你想使用其他编辑器,比如 vim

$ EDITOR=vim unitc EDIT /config

保存更改会自动应用更改并重新配置 Unit。

更多详情可查看官方公告

猜你喜欢

转载自www.oschina.net/news/256516/nginx-unit-1-31-0-released