今天,我们很高兴地宣布NGINX Open Source 1.15.2正式发布。此版本的一项主要功能是新增$ssl_preread_protocol变量。使用TCP(stream)代理转发流量时,该变量可用于区分SSL/TLS与其他协议。例如,如果希望通过在同一端口上运行SSL/TLS和SSH服务来避免防火墙限制,此功能会很有帮助。
这项新功能也将在即将发布的NGINX Plus R16版本中向NGINX Plus客户提供。
何时以及如何使用$ssl_preread_protocol
使用http或stream模块终止并解密SSL/TLS流量时,$ssl_protocol(http、stream)变量会捕获客户端使用的SSL或TLS版本。但有时可能只需转发SSL/TLS流量而不进行解密,并使用stream模块实现基本的TCP代理或负载均衡器。
The stream_ssl_preread模块会检查SSL或TLS连接中的初始ClientHello消息,并提取多个可用于管理连接的值。版本1.15.2中新增的$ssl_preread_protocol变量会从ClientHello消息的client_version字段中获取最新的SSL/TLS版本号。如果ClientHello消息中存在supported_versions扩展,则该变量将设置为TLSv1.3。
如果连接未使用任何版本的SSL或TLS,$ssl_preread_protocol变量将为空,表示该连接使用的是SSL/TLS以外的协议,例如SSH。
以下配置片段在$ssl_preread_protocol变量中使用map块,根据连接所使用的协议,将$upstream变量设置为相应上游组的名称。随后,proxy_pass指令会将请求转发到所选的上游组。请注意,必须在ssl_preread on指令必须包含在server块中,$ssl_preread_protocol变量才能生效。
stream { upstream ssh {
server 192.0.2.1:22;
}
upstream web {
server 192.0.2.2:443;
}
map $ssl_preread_protocol $upstream {
default ssh;
"TLSv1.2" web;
}
# SSH and SSL on the same port
server {
listen 443;
proxy_pass $upstream;
ssl_preread on;
}
}要使配置生效,客户端需要通过端口 443(而非默认端口 22)访问SSH服务器。例如,使用MacOS和Linux内置的SSH客户端时,可以使用-p标志更改端口:
$ ssh ssh-server-ip-address -p 443如何获取最新版本的NGINX
始终可从我们的官方存储库主线分支获取最新版本的NGINX。
了解详情
NGINX Open Source 1.15.2包含其他增强功能和错误修复。有关新增内容的完整列表,请参阅NGINX变更日志。
关于作者
相关博客文章
NGINX Plus R26 正式发布
NGINX Plus R26通过缓存JSON Web密钥集加快JWT验证,并强化TLS握手,从而提升安全性。NGINX JavaScript的新功能包括增强对异步函数的支持,以及实现WebCrypto API。
使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击
gRPC具备开发人员设计和部署现代应用所需的速度与灵活性,但其开放性也使其极易受到第7层DoS攻击。NGINX App Protect DoS可保护gRPC应用免受此类破坏性攻击。
Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划
了解选择错误的Ingress控制器可能带来的风险,以及如何从关键方面着手,让您的选择更好地适应未来需求。
NGINX Plus R19 正式发布
NGINX Plus R19扩展了监控功能,不仅提供更多指标,还新增了指标分析方式;增加试运行模式,用于测试限速效果;增强键值存储,以支持IP地址范围;并使限速更加动态。
NGINX现已正式加入F5
NGINX现已正式成为F5的一部分。Gus Robertson现任F5 NGINX业务部门负责人。他阐述了两家公司在人才、文化和愿景方面融合的价值,以及双方将如何携手增强NGINX的开源产品和商业产品。

