原创

【Nginx】Nginx 调优技巧:HTTPS/TLS - 减少TTFB延迟

前言

您是否希望优化 Nginx 的性能?一种方法是调整 Nginx 以支持最新的 TLS(传输层安全)协议(TLS 1.2 和 TLS 1.3)。在这篇文章中,我们将探讨如何优化 Nginx 的 TLS 配置可以减少 TTFB(首次字节时间)延迟并提升网站速度,从而提供更好的用户体验。

你的证书是用SSL还是TLS?

我们仍然使用“SSL”(安全套接层)这个术语来指代用于安全通信的加密协议,尽管实际上他们正在使用的是TLS。例如,SSL证书被用来在客户端和服务器之间通过互联网建立安全的连接。然而,SSL本身被认为已经过时且不安全,现代加密协议如TLS已经被广泛使用。

此外,“SSL证书”这个术语仍然存在并经常被非正式地用来指代数字证书,尽管实际使用的协议是TLS。也就是说,需要注意的是,应该使用TLS而不是SSL,因为它更安全,能够更好地抵御攻击。

为了推广使用安全的加密协议,建议在电子邮件和通信中使用诸如“TLS”和“TLS证书”这样的术语。实际上,在我更新这篇文章时,我将删除许多关于SSL的实例。

TLS 1.2 和 TLS 1.3 的重要性

在数字化时代,网络安全是个人和企业都关注的重要问题。加密在保护在线数据方面发挥着至关重要的作用,而最受欢迎的加密协议之一是传输层安全性(TLS)协议。让我们简要了解一下TLS 1.2和TLS 1.3的重要性。

自2018年6月30日起,PCI安全标准委员会要求禁用对SSL 3.0和TLS 1.0的支持,最近还要求禁用TLS 1.1。因此,截至本文更新之时,强烈建议使用TLS 1.2和1.3。此外,从2018年开始,尤其是在过去的一两年里,Google Chrome/Chromium开始将“HTTP”网站标记为“不安全”。在过去的几年里,互联网已经迅速过渡到HTTPS。超过90%的Chrome流量通过HTTPS加载,现在默认情况下,100%的顶级网站都使用HTTPS!

考虑到这一点,让我们来看看Nginx的TLS调优技巧,以提高Nginx+HTTPS的性能,从而获得更好的TTFB和更低的延迟。

在 Nginx 上启用 HTTP/2 和 HTTP/3 & QUIC

file

在Nginx上通过HTTPS优化TTFB/延迟速度的第一步是确保至少启用HTTP/2。HTTP/2首先在Nginx 1.9.5版本中实现,取代了spdy。在Nginx上启用HTTP/2模块很简单。我们需要在Nginx配置文件(例如/etc/nginx/sites-enabled/sitename)的服务器块中添加http2这个词。(请记住:HTTP/2需要HTTPS)

在Nginx中,调整这一行listen 443 ssl;,改为listen 443 ssl http2;

使用 QUIC 启用 HTTP/3

40% 的网站使用 HTTP/2,只有 25% 使用 HTTP/3(来源

直到最近,Nginx的主流发行版还没有内置HTTP/3支持。要在Nginx中支持HTTP/3,通常需要使用Cloudflare开发的quiche等必要的HTTP/3和QUIC模块,对Nginx源代码进行修补和编译。在此版本中,以下是一种通过遵循本指南启用HTTP/3和QUIC的方法。

截至本文 11 月 28 日的更新,Nginx 从 1.25.0 版本开始已经加入了实验性支持的 QUIC 和 HTTP/3 协议。这意味着与之前需要补丁和手动编译的版本不同,Nginx 现在提供 HTTP/3 支持作为其核心的一部分,尽管仍处于实验阶段。

然而,值得注意的是,这种支持包含几个关键方面:

实验性质 :在Nginx版本1.25.0中支持HTTP/3被标记为实验性质。这意味着虽然功能可用,但它可能不是完全稳定的,并可能存在一些问题或限制。建议在将其部署到生产环境之前,在测试或开发环境中使用此功能。

手动模块激活 :提供HTTP/3支持的ngx_http_v3_module模块在Nginx 1.25.0中默认不构建。要使用此模块,需要在Nginx配置和构建过程中显式启用它。这是使用--with-http_v3_module配置参数完成的。

SSL库要求 :为了构建和运行ngx_http_v3_module,建议使用支持QUIC的SSL库,如BoringSSL、LibreSSL或QuicTLS。虽然可以使用OpenSSL库,但它将涉及一个不支持某些功能(如早期数据)的OpenSSL兼容层。

考虑到这些因素,尽管Nginx在其最新版本中已经包含了原生的HTTP/3支持,但目前仍处于试验阶段,需要特定的配置步骤才能有效地启用和使用它。

  1. 依赖安装
    sudo apt-get install libssl-dev
    
  2. 安装Nginx
    请在这里查看安装方式:点击跳转
  3. 启用 ngx_http_v3_module

尽管 Nginx 1.25 包含了支持 HTTP/3 的功能,但负责此功能的 ngx_http_v3_module 默认情况下并未启用。要激活此模块,您需要在编译 Nginx 之前的配置阶段中特别包含它。

./configure --with-http_v3_module
  1. 编译和安装Nginx
    make 
    sudo make install
    
  2. 配置

编辑您的Nginx配置文件(通常位于/usr/local/nginx/conf/nginx.conf或/etc/nginx/nginx.conf)。在您的服务器块中添加以下内容:

    server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    listen 443 quic reuseport;

    ssl_certificate /path/to/your/certificate.pem;
    ssl_certificate_key /path/to/your/key.pem;

    # Enable HTTP/3
    ssl_protocols TLSv1.3;
    ssl_prefer_server_ciphers off;

    # Add other server configurations...
}
  1. 重启Nginx
    sudo nginx -s reload
    以上就是相关内容,测试,测试再测试!ngx_http_v3_module仍然处于试验阶段,因此建议在将其部署到生产环境之前,在控制的环境中应用这种设置。

使用Google Chrome检查是否启用了HTTP/2或HTTP/3

要确认是否启用了 HTTP/2 或 HTTP/3:

在Google Chrome中打开您的网站
在网页任意位置右键单击并选择检查
点击网络选项卡
按键盘上的F5键或手动刷新网页
现在,通过您的服务器加载的所有资产,协议列应显示h2或h3
如果缺少协议列,您可以使用右键单击来添加。

Google Chrome inspect network http/2 (h2), http/3 (h3) check.

使用命令行检查是否启用了HTTP/2或HTTP/3

在Linux/Mac命令行使用curl进行测试:

curl --http2 -I https://domain.com/
curl --http3 -I https://domain.com/

如果-http3命令不起作用,您也可以在此处进行检查

启用SSL会话缓存

使用HTTPS连接时,最终用户不是通过一次往返(发送请求,然后服务器响应)进行连接,而是需要进行额外的握手。但是,使用HTTP/2并启用Nginx ssl_session_cache将确保初始连接的HTTPS性能更快,页面加载速度也快于HTTP。

使用ssl_session_cache shared:SSL:[size]选项,您可以配置Nginx在所有工作进程之间共享缓存。1MB可以存储约4000个会话。您还需要指定允许重用的时间(缓存TTL):

ssl_session_cache shared:SSL:1m; # holds approx 4000 sessions
ssl_session_timeout 1h; # 1 hour during which sessions can be re-used.

减小SSL缓冲区大小

Nginx的ssl_buffer_size配置选项设置了通过HTTPS发送数据时使用的缓冲区大小。默认情况下,缓冲区被设置为16k,这是一种一刀切的方法,适用于大响应。然而,为了最小化TTFB(Time To First Byte),通常最好使用更小的值,例如: (我能够将TTFB削减30-50ms。你的结果可能会有所不同。)

ssl_buffer_size 4k;

用于改进TTFB的完整的Nginx SSL配置

ssl_protocols TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
ssl_ecdh_curve secp384r1; # see here and here (pg. 485)
ssl_session_cache shared:SSL:5m;
ssl_session_timeout 24h;
ssl_session_tickets on;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /path/to/your/CA/chain.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
ssl_buffer_size 8k;

用下面的代码测试配置是否通过

nginx -t
nginx -s reload

来源

Nginx tuning tips: HTTPS/TLS – Turbocharge TTFB/Latency

本文来自:【Nginx】Nginx 调优技巧:HTTPS/TLS - 减少TTFB延迟-小码农,转载请保留本条链接,感谢!

温馨提示:
本文最后更新于 2023年12月01日,已超过 317 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我
正文到此结束
本文目录