发布 nginx 1.19.7、njs 0.5.1 和 NGINX Unit 1.22.0

nginx 1.19.7的主分支已经发布,新功能的开发仍在继续(在并行支持的稳定分支1.18中,仅进行了与消除严重错误和漏洞相关的更改)。

主要变化:

  • 当工作进程耗尽可用连接时,nginx 现在不仅会关闭 keepalive 连接,还会关闭等待套接字关闭的连接(“延迟关闭”)。
  • HTTP/2 中的连接处理代码与 HTTP/1.x 实现接近。 对单独设置“http2_recv_timeout”、“http2_idle_timeout”和“http2_max_requests”的支持已停止,取而代之的是通用指令“keepalive_timeout”和“keepalive_requests”。
  • 设置“http2_max_field_size”和“http2_max_header_size”已被删除,应使用“large_client_header_buffers”代替。

与此同时,njs 0.5.1 发布,这是一个用于 nginx Web 服务器的 JavaScript 解释器。 njs 解释器实现了 ECMAScript 标准,并允许您使用配置中的脚本扩展 nginx 处理请求的能力。 脚本可以在配置文件中使用来定义高级逻辑,用于处理请求、生成配置、动态生成响应、修改请求/响应或快速创建存根以解决 Web 应用程序中的问题。

新版本添加了“js_header_filter”指令,该指令允许您设置用于过滤和更改任意响应标头的 JavaScript 函数: js_import foo.js; 位置/{ js_header_filter foo.filter; proxy_pass http://127.0.0.1:8081/; } foo.js: function filter(r) { var cookies = r.headersOut['Set-Cookie']; var len = r.args.len ? 数字(r.args.len):0; r.headersOut['Set-Cookie'] = cookies.filter(v=>v.length > len); } 导出默认{过滤器};

还添加了 ngx.fetch() 方法,它实现了 Fetch API,提供了 HTTP 客户端功能。 该方法支持对 body、headers、buffer_size 和 max_response_body_size 选项的处理。 返回的Response对象支持arrayBuffer()、bodyUsed、json()、headers、ok、redirect、status、statusText、text()、type和url方法,Header对象支持get()、getAll()和has()方法。 函数 fetch(r) { ngx.fetch('http://nginx.org/') .then(reply =>reply.text()) .then(body => r.return(200, body)) .catch (e => r.return(501, e.message)); }

您还可以注意到 NGINX Unit 1.22 应用服务器的发布,它提供了以各种编程语言(Python、PHP、Perl、Ruby、Go、JavaScript/Node.js 和 Java)运行 Web 应用程序的解决方案。 NGINX Unit可以同时运行多个不同编程语言的应用程序,其启动参数可以动态更改,无需编辑配置文件和重启。 该代码是用 C 语言编写的,并根据 Apache 2.0 许可证分发。

NGINX Unit的新版本专注于提高稳定性、扩展测试工具和修复错误。 在为 Linux 生成的包中,NGINX Unit 运行的用户和组已更改。 现在,进程在组单元中的单个用户单元下运行,而不是“nobody:nobody”。 确保与 Node.js 模块中的 ServerRequest 和 ServerResponse 对象的 Stream API 兼容。 Python 应用程序的“path”选项允许指定多个目录。

来源: opennet.ru

添加评论