我们很高兴地宣布, NGINX Plus Release 14(R14)现已提供给我们的NGINX Plus订阅者。 NGINX Plus 是唯一集负载均衡器、内容缓存和 Web 服务器于一体的服务器。 它基于 NGINX 开源,并添加了独家功能以及屡获殊荣的 24 小时支持。 NGINX Plus R14包含新的安全性和集群增强功能。
使用 NGINX Plus,您可以使用 JSON Web Tokens (JWT) 实施访问控制。 NGINX Plus R14增加了对嵌套 JWT 声明的支持,因此您可以根据嵌套在 JWT 中的组成员身份信息授予或拒绝访问权限。 NGINX Plus R10首次引入了原生 JWT 身份验证支持,使得 NGINX Plus 可用作 API 和应用的身份验证网关。
NGINX Plus R14 的其他功能包括:
流
环境中的 TCP 和 UDP应用。upper_conf
和status
指令启用)已经被弃用。 它们已被新的NGINX Plus API取代,该 API 由 R14 中包含的更新的实时活动监控仪表板使用。API 和微服务的部署人员正在转向 JSON Web Token(JWT,发音为“jot”)标准,因为它简单且灵活。 JWT 是一种紧凑且高度可移植的身份信息交换方式。 您可以从许多发行者处获取 JWT,包括 Okta、OneLogin 和自主开发的解决方案。 然后,NGINX Plus 可以根据用户或 API 客户端是否提供了有效的 JWT 来授予或拒绝访问。
NGINX Plus R14增加了对嵌套 JWT 声明和数组数据的支持,以及 JWT 签名算法的更长密钥大小。 这在验证 JWT 时提供了更大的灵活性和更高的安全性。
JWT 有效负载可以包含有关用户的其他“嵌套”信息,例如组成员身份,可用于授权对资源的访问。 这有助于避免多次查询数据库来授权用户请求。
考虑以下 JWT 有效负载:
{ “表达式”: 1513429677,
“sub”:“xample@example.com”,
“aud”:“nginx”,
“attributes”:{
“name”: “Xavier Ample”,
“房间”: "A123",
"部门": “演示”
},
“群组”: [
“管理员”,
“Foobar”,
“Bazpub”
]
}
在上面的 JWT 中, attributes
是一个“嵌套声明”对象, groups
是一个数组。 您可以使用以下配置片段将名称
值从属性
对象传递到后端,并拒绝不属于管理员
组的用户的访问。
auth_jwt_claim_set $jwt_groups groups; # 数组值将以逗号分隔的值形式加入 auth_jwt_claim_set $jwt_real_name 属性名称; # 此值有两层深度
map $jwt_groups $isAdmin {
"~\bAdministrator\b" 1; # 出现在 CSV 列表的字边界 (\b) 内
default 0;
}
server {
listen 443 ssl;
#ssl_*; # SSL/TLS 终止配置
auth_jwt "closed site";
auth_jwt_key_file jwk.json;
location / {
proxy_set_header X-RealName $jwt_real_name; # 将真实姓名作为标头传递
proxy_set_header X-Subject $jwt_claim_sub; # 自动设置 L1 声明
proxy_pass http://my_backend;
}
位置 /admin {
if ( $isAdmin = 0 ) {
return 403; # 禁止
}
proxy_pass http://my_backend;
}
}
以下是有关此配置如何工作的更多详细信息:
auth_jwt_claim_set
指令,我们将$jwt_groups
NGINX 变量设置为 JWT 中定义的组
数组。 数组中的值用逗号分隔,并分配给$jwt_groups
。map
指令,我们在组列表中搜索管理员
关键字。 如果存在,则该用户被视为管理员,并且$isAdmin
设置为 1。 否则$isAdmin
设置为 0。位置
块检查$isAdmin
变量。 如果为 0,则 NGINX 返回状态代码403
禁止
返回客户端。使用NGINX Plus R14 ,您还可以从嵌套的 JWT 声明中创建变量。 然后可以将变量放入 HTTP 标头中,然后再将其代理到后端服务器。
在上面的例子中,我们使用auth_jwt_claim_set
指令将$jwt_real_name
NGINX 变量设置为属性
声明中的名称
对象的值。 proxy_set_header
指令将X-RealName
HTTP 标头设置为名称
对象的值,并将请求代理到my_backend
。
有关使用 NGINX Plus 验证 JWT 的所有配置指令的更多信息,请参阅参考文档。
NGINX Plus R14现在支持 256 位、384 位和 512 位签名密钥,以实现更强的签名验证,并更轻松地与默认使用更长签名密钥的身份和访问权限管理(IAM) 产品集成。 更长的签名密钥适用于所有受支持的签名算法:
例如,您可以将NGINX Plus R14配置为仅接受使用 RS512 算法签名的 JSON Web 令牌:
服务器 { listen 443 ssl;
#ssl_*; # SSL/TLS 终止配置
auth_jwt "已关闭站点";
auth_jwt_key_file jwk.json;
location / {
if ( $jwt_header_alg != RS512 ) {
return 401;
}
proxy_pass http://my_backend;
}
}
在这种情况下,如果 JWT 未使用 RS512 算法签名,NGINX Plus 将不会代理请求,并返回状态代码 401
未授权
发送给发出请求的客户端。
笔记: JWT 支持是 NGINX Plus 独有的。
NGINX Plus R13引入了HTTP 的键值存储模块,允许您动态地在一个或多个共享内存区域中创建、修改和清除键值对。 键值存储 API 的一个很好的用例是将其与 fail2ban 一起使用来创建动态 IP 拒绝列表。
NGINX Plus R14为 Stream 添加了 Key-Value Store 模块,使得 TCP 和 UDP应用可以使用与 HTTP 应用程序相同的键值对功能。
NGINX Plus R14作为NGINX Plus API的一部分实现了流
上下文中动态重新配置键值存储。
笔记: 键值存储和 API 是 NGINX Plus 独有的。
NGINX JavaScript 模块(以前称为 nginScript)是 NGINX Plus 的基于 JavaScript 的脚本语言。 在NGINX Plus R14中,NGINX JavaScript 的功能得到了扩展,进一步提高了可编程性。 更新后的 NGINX JavaScript 动态模块包提供了以下新的增强功能。
JavaScript JSON 对象现在可作为 NGINX JavaScript 中的本机对象使用。 这提供了一种更方便的方式来管理复杂的数据结构,并且还允许 NGINX JavaScript 解析和操作从后端 API 收到的 JSON 响应。
以下njs
shell 示例演示如何使用内置对象语法解析和提取 JSON 数据。
$ 新泽西交互式 njscript
v.<Tab> -> v 的属性和原型方法。
输入 console.help() 了解更多信息
>> var my_data = '{"colors":[{"name":"red","fancy":"砖尘"}, {"name":"blue","fancy":"海浪"}]}';
>> var my_object = JSON.解析(my_data);
>> my_object.颜色[1].花式;
浪花
>>
Node.js 是最流行的服务器端 JavaScript 实现,它提供了访问操作系统文件系统的内置方法(客户端 JavaScript 不允许文件系统访问)。 借助NGINX Plus R14 ,您现在可以在 NGINX JavaScript 中使用 Node.js 文件系统方法来读取和写入文件,从而可以自定义应用交付工作流程。 允许执行以下操作:
fs.readFile
、 fs.readFileSync
fs.writeFile
、 fs.writeFileSync
fs.appendFile
, fs.appendFileSync
这个 NGINX JavaScript shell 示例展示了如何使用 NGINX JavaScript 将文件内容读入变量。
$ 新泽西交互式 njscript
v.<Tab> -> v 的属性和原型方法。
输入 console.help() 了解更多信息
>> var fs = require('fs');
>> var tz = fs.readFileSync('/etc/timezone');
>> 茨
欧洲/伦敦
>>
为了进一步帮助开发人员进行调试和故障排除,现在提供了各种错误对象:
错误
求值错误
内部错误
范围误差
參考錯誤
语法错误
类型错误
URI错误
此外,NGINX JavaScript 现在提供错误和异常的回溯。 错误日志中的以下条目显示了失败的系统操作的简单回溯。
2017/12/12 01:52:08 [错误] 43441#43441: *10 js异常: 错误: 没有这样的文件或目录 在 native (native)
在 my_function (:1)
在 main (native)
,客户端: 127.0.0.1,服务器:,请求: “GET / HTTP / 1.1”,主机:“localhost:80”
在我们的博客上了解如何开始使用 NGINX JavaScript<.htmla>。
NGINX Plus R13引入了NGINX Plus API ,以 JSON 格式提供对实时监控和指标的访问。 在NGINX Plus R14中,内置的实时活动监控仪表板现在使用NGINX Plus API ,为用户实时提供 80 多个监控指标。
NGINX Plus 以前版本中的仪表板使用的动态重新配置和扩展状态 API 已被弃用。 这些 API 在此版本中仍然可用,并将包含在NGINX Plus R15中。 它们将在NGINX Plus R16中被彻底删除,因此我们鼓励您立即更新您的配置。
弃用的仪表板的配置如下:
location /status { # DEPRECATED status; # DEPRECATED
# 控制访问的指令,例如“允许”和“拒绝”
}
location = /status.html { # DEPRECATED
root /usr/share/nginx/html; # DEPRECATED
}
要将现有的 NGINX Plus 实例迁移到新的 NGINX Plus 仪表板,请将前面的代码片段替换为以下内容:
location /api { api write=on;
# 控制访问的指令,例如“allow”和“deny”
}
location = /dashboard.html {
root /usr/share/nginx/html;
}
# 将请求重定向到旧仪表板
location = /status.html {
return 301 /dashboard.html;
}
如代码片段所示,我们强烈建议您限制对 API 的访问,例如使用允许
和拒绝
指令。 确保将现有的访问控制从/status
位置迁移到/api
位置。
有关新NGINX Plus API的更多信息,请参阅NGINX Plus R13公告。
笔记: 内置仪表板是 NGINX Plus 独有的。
当使服务器脱机时,您可以允许现有会话完成同时阻止建立新会话,从而改善用户体验。 直到没有剩余的活动会话时,服务器才会离线。 这被称为耗尽服务器。 您可以通过向相关服务器的 API 资源发送包含{"drain":true} 的
PATCH
请求来使用NGINX Plus API动态执行此操作。
NGINX Plus R14通过向上游服务器
指令提供drain
参数将此功能扩展为基于文件的配置。
上游 my_backend { 服务器 10.0.0.1;
服务器 10.0.0.2;
服务器 10.0.0.3 排水;
}
当您重新加载 NGINX Plus 配置时,IP 为 10.0.0.3 的上游服务器将进入消耗模式。 您稍后可以通过删除相应的服务器
指令或将耗尽
参数替换为down
来彻底退役服务器。
通过NGINX Plus R14 ,我们很高兴地宣布即将推出在 NGINX Plus 实例集群之间共享状态的功能的技术预览。 技术预览实现了会话持久性的粘性学习方法,以展示共享会话数据的好处,否则会话数据将由每个实例单独管理。
技术预览作为单独的可安装包提供,可根据要求提供。 请联系您的 NGINX 销售代表以获取访问权限。
笔记:
笔记: 集群支持和粘性学习会话持久性都是 NGINX Plus 独有的。
NGINX Plus R14还包括以下增强功能:
服务器
指令的参数;DNS 定期解析名称,NGINX Plus 会自动使用修订后的服务器集(请参阅NGINX Plus 管理指南)。 NGINX Plus 现在在 NGINX Plus 重新加载期间保留主机名或域名的 DNS 记录。 以前,重新加载后必须重新解析名称,这意味着在解析完成之前到达的请求无法得到服务。$ssl_client_escaped_cert
变量是一个新的嵌入式 NGINX 变量,为您提供一种安全便捷的方式将您的客户端证书编码在 HTTP 标头中,以便您可以将它们发送到您的后端应用。 该变量是 URL 编码的。NGINX Plus R14包括针对客户端应用的改进的身份验证功能、额外的集群功能、NGINX JavaScript 增强功能以及显著的错误修复。 特别是, NGINX Plus R13引入了一个主动健康检查的错误,旧的工作进程可能会无限期地执行健康检查。 NGINX Plus R14已解决此问题。
如果您正在运行 NGINX Plus,我们强烈建议您尽快升级到 Release 14。 您将获得大量修复和改进,升级将帮助 NGINX 在您需要提出支持单时为您提供帮助。 客户门户网站上提供安装和升级说明。
在继续升级之前,请仔细查看本博客文章中描述的新功能和行为变化。
如果您还没有尝试过NGINX Plus ,我们鼓励您尝试一下——用于 Web 加速、负载均衡和应用交付,或作为具有增强监控和管理 API 的完全支持的 Web 服务器。 您今天即可免费开始使用30 天评估版。 亲自了解 NGINX Plus 如何帮助您交付和扩展您的应用。
“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”