使用NGINX 1.15.2在同一端口上运行SSL和非SSL协议

NGINX | 2018年7月24日

今天,我们很高兴地宣布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 | 2022/02/15

NGINX Plus R26 正式发布

NGINX Plus R26通过缓存JSON Web密钥集加快JWT验证,并强化TLS握手,从而提升安全性。NGINX JavaScript的新功能包括增强对异步函数的支持,以及实现WebCrypto API。

使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击
NGINX | 2022/02/10

使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击

gRPC具备开发人员设计和部署现代应用所需的速度与灵活性,但其开放性也使其极易受到第7层DoS攻击。NGINX App Protect DoS可保护gRPC应用免受此类破坏性攻击。

Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划
NGINX | 2021/09/13

Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划

了解选择错误的Ingress控制器可能带来的风险,以及如何从关键方面着手,让您的选择更好地适应未来需求。

NGINX Plus R19 正式发布
NGINX | 2019/09/03

NGINX Plus R19 正式发布

NGINX Plus R19扩展了监控功能,不仅提供更多指标,还新增了指标分析方式;增加试运行模式,用于测试限速效果;增强键值存储,以支持IP地址范围;并使限速更加动态。

NGINX现已正式加入F5
NGINX | 2019/05/09

NGINX现已正式加入F5

NGINX现已正式成为F5的一部分。Gus Robertson现任F5 NGINX业务部门负责人。他阐述了两家公司在人才、文化和愿景方面融合的价值,以及双方将如何携手增强NGINX的开源产品和商业产品。

使用NGINX和NGINX Plus实现高性能缓存
NGINX | 2016/08/24

使用NGINX和NGINX Plus实现高性能缓存

我将介绍NGINX在内容缓存和性能方面的工作原理,并分享一些控制NGINX内容缓存方式的技巧。