我们很高兴地宣布, NGINX Plus Release 13(R13)现在可供所有NGINX Plus订阅者免费升级。 NGINX Plus 是一个基于 NGINX 开源构建的组合式 Web 服务器、负载均衡器和内容缓存。 NGINX Plus R13 包含专注于动态部署、增强的调试功能以及改进的安全性和性能的新功能。
NGINX Plus R13 引入了对以下内容的支持:
njs
交互式 shell 提供了一个控制台,可显示 JavaScript 的所有内置对象。 可以进一步研究这些对象以揭示每个对象的可用方法和原语。 进一步的增强包括对会话持久性的粘性学习方法的改进、HTTP 尾标支持以及用于 HTTP 替换的新第三方动态模块。
sticky_cookie_insert
指令已在 NGINX Plus R13 中删除,并已在 NGINX Plus R2 中弃用。ModSecurity 模块中的指令不再受支持– ModSecurity 的SecRequestBodyInMemoryLimit
指令不再受支持。 客户可以安全地删除该指令,因为 ModSecurity 模块遵循 NGINX 配置定义的请求体处理。
[编辑– NGINX Plus 的NGINX ModSecurity WAF模块于2022 年 4 月 1 日正式停止销售,并将于2024 年 3 月 31 日停止使用。 有关更多详细信息,请参阅我们博客上的“F5 NGINX ModSecurity WAF 正在过渡到终止使用<.htmla>”。]
NGINX Plus R13 包含一个在单一端点下统一的新 REST API 。 NGINX Plus 的先前版本包含单独的上游配置和扩展状态API。 新的 API 结合了两者的功能,并且还在各种用例中支持新的 Key-Value Store 模块进行动态配置(在下面的Key-Value Store部分中讨论)。
要启用NGINX Plus API ,请在位置
块中包含新的api
指令:
服务器 { listen 80;
location /api {
api write=on;
# 仅允许授权用户访问的指令
}
}
默认情况下, NGINX Plus API提供对数据的只读访问。 将write=on
参数添加到api
指令以启用读/写访问,以便可以对上游服务器和新的键值存储模块进行更改。 我们强烈建议仅将 API 访问权限限制为授权用户,尤其是在启用读/写模式时。
要查看 API 端点提供的所有类型的信息,请运行以下命令:
$ curl http://localhost:80/api/1/ ["nginx","进程","连接","ssl","slabs","http","流"]
要显示有关特定类型信息的详细信息,请将适当的字符串附加到请求 URI:
连接
– 显示总连接数的指标http
– 显示 HTTP 流量指标并修改 HTTP 上游配置
http
下还有两种“子类型”:
http/server_zones
– 显示有关 HTTP 虚拟服务器的信息http/upstreams
– 显示有关 HTTP 上游服务器组的信息并修改其配置nginx
– 显示有关 NGINX 的常规信息processes
– 显示有关 NGINX 工作进程的信息slabs
– 显示 NGINX 分配的共享内存的信息ssl
– 实时显示 SSL/TLS 客户端的指标stream
– 显示 TCP/UDP 流量指标并修改 TCP/UDP 上游服务器组的配置(在stream/upstreams
处)NGINX Plus 在 NGINX 开源版本的基础上报告了 40 多个独家指标。 您现在可以使用NGINX Plus API访问这些指标。使用 API 访问对您重要的指标。
举例来说,将连接
附加到 URI 以输出连接状态的快照,其中包括已接受、活动、丢弃和空闲的客户端连接的数量。
$ curl http://localhost:80/api/1/connections {“accepted”:3,“dropped”:0,“active”:1,“idle”:0}
另一个示例:将ssl
附加到 URI 以实时输出 SSL 客户端统计信息的快照。
$ curl http://localhost:80/api/1/ssl {“handshakes”:0,“handshakes_failed”:0,“session_reuses”:0}
在 NGINX Plus R12 及更早版本中,您可以使用upper_conf
指令来启用现有上游服务器组的动态配置,而无需重新加载 NGINX Plus。 此功能现已纳入NGINX Plus API 。
此 NGINX Plus 配置代码片段在名为backend的上游组中定义了两个服务器,并在/api启用了NGINX Plus API :
上游后端 { 区域后端 64k;
服务器 10.10.10.2;
服务器 10.10.10.4;
}
服务器 {
listen 80;
server_name www.example.org;
location /api {
api write=on;
}
}
要将服务器添加到后端组,请在对/api/1/http/upstreams/backend/servers 的curl
请求中包含-d
选项,并使用定义新服务器 IP 地址的 JSON 文本(此处为 10.10.10.6)。 -i
选项表示 HTTP 标头包含在响应中。 (您可以省略-X POST,
因为这是-d
的默认方法,但我们将其包括在内以与其他方法保持一致。)
$ curl -iX POST -d '{"server":"10.10.10.6"}' http://localhost/api/1/http/upstreams/backend/servers HTTP/1.1 201 已创建...
有关配置上游组的所有选项的详细信息,请参阅NGINX Plus API模块的参考文档。
NGINX Plus R13 引入了新的Key-Value Store模块。 您可以使用NGINX Plus API在一个或多个“keyval”共享内存区域中动态创建、修改和删除键值对。 然后可以将每个键值对的值评估为变量,以供其他 NGINX Plus 功能使用。
要添加、修改、读取和删除键值存储中的条目,请分别使用POST
、 PATCH
、 GET
和DELETE
HTTP 方法。 键值存储提供了丰富的动态配置方案,实现与外部系统的实时集成。
示例用例包括:
以下配置片段使用键值存储模块来管理网站的虚荣网址。
keyval_zone zone=redirects:1M state=state/redirects.json; # 将键值对保存到文件keyval $uri $target zone=redirects; # $uri 是键,$target 是值
server {
listen 80;
location /api {
api write=on; # 启用 NGINX Plus API(在生产环境中保护此位置)
}
if ($target) { # 当 $uri 存在于“redirects”键值区域中时为 True
return 301 $target; # 将客户端重定向到 $uri 的匹配值
}
location / {
proxy_pass http://backend;
}
}
在keyval
指令中,键设置为发出 HTTP 请求的远程计算机的 URI。 如果$uri
是键值存储中的键,则与该键关联的值将被分配给名为$target
的新变量。 然后,如果$target
存在,NGINX Plus 会将客户端重定向到$uri
的匹配值。
为了使用初始虚荣网址填充键值存储,我们将编码为 JSON 的数据发送到NGINX Plus API的 URI。
$ curl -iX POST -d '{"/conf":"/conf2017"}' http://localhost/api/1/http/keyvals/redirects HTTP/1.1 201 已创建...
现在请求/conf的客户端将被重定向到/conf2017 。
$ curl -i http://localhost/conf HTTP/1.1 301 临时移动位置:http://localhost/conf2017
您可以使用PATCH
方法向键值存储添加更多虚荣 URL 重定向并动态修改现有条目。
$ curl -iX PATCH -d '{"/conf":"/conf2018"}' http://localhost/api/1/http/keyvals/redirects HTTP/1.1 204 无内容...
您可以使用keyval
指令配置多个单独的键值存储,为每个键值存储定义不同的共享内存区域。 有关更多信息,请参阅键值存储模块的参考文档。
新的NGINX Plus API带有Swagger规范,可用于探索 API 并了解每种资源的功能。 Swagger 文档与 NGINX Plus 捆绑在一起,可以通过http:// nginx-host /swagger-ui/访问。
Swagger UI 的交互部分需要启用NGINX Plus API ,这可以通过取消注释conf.d/default.conf文件中的/api/位置块来实现。
# 启用 /api/ 位置并进行适当的访问控制以便# 使用 NGINX Plus API
#
#location /api/ {
# api write=on;
# allow 127.0.0.1;
# denied all;
#}
您还可以访问https://demo.nginx.com/swagger-ui/浏览NGINX Plus API文档。
笔记: 整个NGINX Plus API ,包括扩展的状态指标、上游配置和新的键值存储模块,都是 NGINX Plus 独有的。
使用 NGINX Plus R13,您可以启用 HTTP 请求镜像。 利用此功能,代理到上游组的 HTTP 请求将被克隆并发送到不同的目的地。 原始请求将照常处理,但克隆请求的任何响应都会被忽略。 请求镜像有很多用例,包括:
启用请求镜像对整个系统吞吐量和性能的影响可以忽略不计。 以下配置片段显示了如何使用新的镜像
指令来克隆请求并将其传递给单独的上游服务器。
位置 / { 镜像 /mirror;
代理密码 http://backend;
}
位置 /mirror {
内部;
代理密码 http://test_backend$request_uri;
}
请求被代理到后端
上游组进行常规处理。 它们也被克隆并代理到名为test_backend的单独上游组,保留来自原始请求的 URI。
笔记: 请求镜像最初在 NGINX Open Source 1.13.4 中发布。
自从NGINX Plus R12正式发布以来,NGINX JavaScript 模块(以前称为 nginScript)不断扩展,并增加了对核心 JavaScript 语言的支持。 在此版本中,我们引入了对十六进制数(例如 0x7b)和科学计数法(例如 512e10)的支持。 Object
类的原始方法也已实现。
NGINX JavaScript 现在还提供一个交互式 shell,通过njs
命令调用,以协助开发 NGINX JavaScript 代码。
以下 shell 代码片段展示了如何进入 NGINX JavaScript 交互式 shell,定义一个生成最多 30 秒内随机日期的表达式,并计算两个数字的总和。
$ njs interactive njscript >> Date.now() + Math.round(Math.random()*30*1000); 1500976350968 >> 0x7b + 512e10; 5120000000123 >>
要了解更多信息,请参阅我们博客上 NGINX JavaScript<.htmla> 的介绍。
笔记: NGINX JavaScript 适用于 NGINX 开源和 NGINX Plus。
NGINX 1.11.5 和 NGINX Plus R11 引入了独立于 NGINX 本身编译动态模块的支持。 这允许 NGINX 和 NGINX Plus 的用户使用来自 NGINX, Inc. 存储库的官方版本并仅加载他们需要的动态模块。
借助 NGINX Plus R13,我们提供了一个构建工具,用于将动态模块编译并打包为可安装模块,该模块保留并遵守它与所链接的基本 NGINX 版本之间的依赖关系。
有关构建工具的完整详细信息,请参阅我们博客上的为动态模块创建可安装包。
笔记: 构建工具适用于 NGINX Open Source 和 NGINX Plus。
会话持久性是 NGINX Plus 负载均衡的一个非常有用的功能,它使您能够将所有请求从特定客户端发送到一台服务器。 有多种方法可以建立会话持久性;使用“粘性学习”方法,NGINX Plus 会查找特定 cookie 的存在,并在请求中包含该 cookie 时将客户端固定到同一服务器。
使用 NGINX Plus R13,您现在可以在上游服务器发送其响应标头后立即建立粘性会话,而不必等到完整的响应负载到达。 因此 NGINX Plus 可以尽早将粘性会话发送给客户端。 将新的header
参数添加到sticky
learn
指令中:
上游后端 { 区域后端 64k;
服务器 10.10.10.2;
服务器 10.10.10.4;
粘性学习 create=$upstream_cookie_sessionid
lookup=$cookie_sessionid
zone=client_sessions:1m
header;
}
如果应用容易出现错误,并且您希望客户端将失败的请求重新发送到同一个上游服务器,则标头
参数特别有用。
笔记: Sticky‑learn 会话持久性是 NGINX Plus 独有的。
NGINX Plus R13 引入了以下附加功能:
add_trailer
指令可以将任意尾部添加到 HTTP 响应的末尾。 尾部响应标头允许发送者在分块消息末尾包含附加字段,以提供在发送消息正文时可能动态生成的元数据,例如消息完整性检查或数字签名。worker_shutdown_timeout
指令设置超时,以便更快地正常关闭工作进程。 当收到关闭或重启信号后超时,NGINX Plus 会尝试关闭所有打开的客户端连接。如果您正在运行 NGINX Plus,我们强烈建议您尽快升级到 Release 13。 您将获得大量修复和改进,如果您需要提出支持单,它将帮助我们为您提供帮助。 您可以在客户门户上找到安装和升级说明。
在继续升级之前,请仔细查看本博客文章中描述的新功能和行为变化。
如果您还没有尝试过NGINX Plus ,我们鼓励您尝试使用它来进行 Web 加速、负载均衡和应用交付,或者作为具有增强监控和管理 API 的完全支持的 Web 服务器。 您可以立即免费开始30 天评估,亲自了解 NGINX Plus 如何帮助您交付和扩展您的应用。
“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”