NGINX Plus 18 版本发布,支持动态证书加载

阅读数:4308 2019 年 5 月 6 日 08:00

NGINX Plus 18版本发布,支持动态证书加载

NGINX 已经发布了 NGINX Plus 18 版本(R18),这是它们一体化的负载平衡器、内容缓存和 web 服务器。该版本的特性包括支持动态证书加载、对 OpenID Connect 实现的增强以及为虚拟服务器指定端口范围的能力。

通过支持动态证书加载,SSL/TLS 证书现在可以按需加载,不需要在配置文件中明确地列出。根据 TLS 握手期间由服务器名称指示(Server Name Indication,简称 SNI)提供的主机名,NGINX Plus 现在可以动态地加载正确的证书。这允许在单个服务配置下托管多个安全网站。

在 NGINX Plus 之前的版本中,每个安全主机名都需要在配置文件中有自己的 server 代码块,静态地把证书和私钥指定为磁盘上的文件。这也意味着,当添加新主机名时,都必须重新加载配置。

借助该新功能,现在可以在配置中只有一个 server 块来安全地托管任意数量的站点:

复制代码
server {
listen 443 ssl;
ssl_certificate /etc/ssl/$ssl_server_name.crt; # Lazy load from SNI
ssl_certificate_key /etc/ssl/$ssl_server_name.key; # ditto
ssl_protocols TLSv1.3 TLSv1.2 TLSv1.1;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header Host $host;
proxy_pass http://my_backend;
}

有了这个设置,基于 $ssl_server_name 变量的值,证书能够根据需要从硬盘延迟加载。然后,证书和 key 将会缓存在文件系统缓存的内存中。只要变量的值在 SNI(这是在读取请求行和头信息之前发生的)期间是可用的,那么就可以在那里使用它。

还可以在内存中(在键 - 值对存储中)存储 SSL/TLS 证书数据,而不是作为文件存在磁盘上。这允许证书通过 Plus API 以程序的方式进行安装。NGINX 建议 Plus 的整个集群部署都这么操作,因为证书数据将只需要上传一次,就可以自动传播,或者用于自动与证书颁发者(如 Hashicorp Vault )集成。

在这两种情况下,在初始证书加载期间都会产生性能损失。证书加载过程只在 TLS 握手期间发生,一旦会话建立,请求处理将正常进行。根据 NGINX 的说法,该损失将造成初始 TLS 握手过程延长 20-30%。

该版本还包括主动健康检查功能的改进。该版本引入了 require 指令,允许测试任何变量的值,包括标准变量和用户定义的变量。match 块中的 require 指令允许检查一个或多个变量必须有非零值才让测试通过。

进一步的健康检查改进包括允许用 proxy_session_drop 指令来终止第 4 层连接。之前,如果已建立的客户端连接到的服务器不健康,那么,它们可能会遇到超时。这是因为,之前只在新客户端尝试建立连接时才考虑后端服务器的健康状态。新的 proxy_session_drop 指令将允许立即关闭该连接。启用该指令后,还可以通过一个主动健康检查的失败或上游组中服务器的删除(例如,通过 DNS 查找来删除)来触发连接终止。

该版本提供的其他功能包括:

  • 现在,OpenID Connect 实现支持不透明会话令牌、刷新令牌和注销 URL

  • NGINX Plus 服务器现在可以配置为监听指定范围的端口(如 80-90)

  • 现在可以用配置中的变量直接创建键 - 值对

关于该版本中包含的更多细节和其他功能,请参阅 NGINX 博客中的官方声明。NGINX Plus 可以作为 NGINX 应用平台的一部分进行试用

阅读英文原文 NGINX Plus Release 18 Available with Support for Dynamic Certificate Loading

收藏

评论

微博

用户头像
发表评论

注册/登录 InfoQ 发表评论