NGINX和NGINX Plus提供多项功能,可满足大多数SSL/TLS要求。它们利用OpenSSL和标准处理器芯片的处理能力,以经济高效的方式提供SSL/TLS性能。随着标准处理器芯片的处理能力不断提升,以及芯片供应商增加对加密加速的支持,使用标准处理器芯片相较于专用SSL/TLS芯片的成本优势也在持续扩大。

NGINX和NGINX Plus与SSL/TLS结合使用时,主要有三种用例。
SSL/TLS卸载
将NGINX用作代理时,可以从后端服务器卸载SSL解密处理。在代理上执行解密有以下优势:
- 提升性能:SSL解密对性能影响最大的环节是初始握手。为提升性能,执行解密的服务器会缓存SSL会话ID并管理TLS会话票证。如果由代理执行解密,来自同一客户端的所有请求都可以使用缓存值。如果由后端服务器执行解密,则每当客户端请求转发到其他服务器时,客户端都必须重新进行身份验证。使用TLS会话票证有助于缓解此问题,但并非所有客户端都支持该功能,而且配置和管理可能较为困难。
- 提高后端服务器的利用率:SSL/TLS处理会占用大量CPU资源,并且随着密钥长度增加,资源占用还会进一步上升。将这项工作从后端服务器移除,可使其专注于更擅长的内容交付。
- 智能路由:通过解密流量,代理可以访问标头、URI等请求内容,并利用这些数据路由请求。
- 证书管理:只需在代理服务器上购买并安装证书,无需在所有后端服务器上安装,从而节省时间和成本。
- 安全补丁:如果SSL/TLS协议栈中出现漏洞,只需在代理服务器上应用相应的补丁。
有关详细信息,请参阅《NGINX Plus 管理指南》中的“NGINX SSL 终止”。
到源服务器的SSL/TLS加密
有时,您可能需要NGINX对发送到后端服务器的流量进行加密。这些请求到达NGINX服务器时,可能是明文流量,也可能是加密流量;对于加密流量,NGINX必须先解密,才能做出路由决策。使用与后端服务器之间的持久连接池,可以减少SSL/TLS握手次数,从而提升SSL/TLS性能。只需将NGINX配置为通过“https”进行代理,即可自动加密尚未加密的流量。
端到端加密
由于NGINX既能解密又能加密,因此可以对所有请求实施端到端加密,同时仍由NGINX做出第7层路由决策。在这种情况下,客户端通过HTTPS与NGINX通信。NGINX解密请求,然后重新加密,再将其发送到后端服务器。如果代理服务器与后端服务器不在同一数据中心,这种方式会很有用。随着越来越多的服务器迁移到云端,在代理服务器与后端服务器之间使用HTTPS也变得愈发必要。
客户端证书
NGINX可以处理SSL/TLS客户端证书,并可将其配置为可选或必需。客户端证书无需密码即可将系统访问权限限制为仅允许预先批准的客户端。您可以将已吊销的证书添加到证书吊销列表(CRL)中,以便管理证书。NGINX会检查该列表,以确定客户端证书是否仍然有效。
其他安全功能
还有许多其他功能可帮助支持这些用例,包括但不限于以下功能:
- 多个证书:单个NGINX实例可支持不同域的多个证书,并可扩展至支持数十万个证书。常见用例是由一个NGINX实例为多个IP地址和域提供服务,且每个域都需要自己的证书。
- OCSP装订:启用后,NGINX会附带由证书颁发机构签名且带时间戳的OCSP响应,客户端可使用该响应验证服务器证书,从而避免直接联系OCSP服务器造成的性能损失。
- SSL/TLS密码套件:可以指定启用哪些密码套件。
- SSL/TLS协议:可以指定启用哪些协议,包括SSLv2、SSLv3、TLSv1、TLSv1.1和TLSv1.2。
- 证书链:NGINX支持证书链。当网站证书并非由CA(证书颁发机构)的根证书直接签名,而是由一系列中间证书签名时,可使用证书链。Web服务器会提供一个包含这些中间证书的“证书链”,以便Web客户端验证将网站证书连接到受信任根证书的信任链。
- HTTPS服务器优化:通过配置工作进程数量、使用keepalive连接和SSL/TLS会话缓存,可以对NGINX进行调优,以充分提升其SSL/TLS性能。
如需了解更多详情,请参阅以下资源:
- NGINX SSL 终止,详见《NGINX Plus 管理指南》
- 配置HTTPS服务器,位于nginx.org
- ngx_http_ssl_module 参考文档,位于nginx.org
示例
以下是NGINX安全功能的几个示例。阅读这些示例需要对NGINX配置有基本了解。
以下配置处理www.example.com的HTTP流量,并将其代理到上游服务器组:
upstream backends {
server 192.168.100.100:80;
server 192.168.100.101:80;
}
server {
listen 80;
server_name www.example.com;
location / {
proxy_pass http://backends;
}
}现在添加HTTPS支持,使NGINX使用证书和私钥解密流量,并通过HTTP与后端服务器通信:
upstream backends {
server 192.168.100.100:80;
server 192.168.100.101:80;
}
server {
listen 80;
listen 443 ssl; # 'ssl' parameter tells NGINX to decrypt the traffic
server_name www.example.com;
ssl_certificate www.example.com.crt; # The certificate file
ssl_certificate_key www.example.com.key; # The private key file
location / {
proxy_pass http://backends;
}
}或者,如果改为通过HTTP接收流量,并通过HTTPS将其发送到后端服务器:
upstream backends {
server 192.168.100.100:443;
server 192.168.100.101:443;
}
server {
listen 80;
server_name www.example.com;
location / {
proxy_pass https://backends; # 'https' prefix tells NGINX to encrypt the traffic
}
}要试用NGINX Plus,请立即开始30天免费试用,或联系我们讨论您的使用场景。
关于作者

相关博客文章
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的开源产品和商业产品。
