Nginx性能优化(二):HTTP/2升级指南,让你的网站开启极速模式

还是HTTP/1.1?那你真的太out了。3分钟带你升级HTTP/2,告别队头阻塞!

原文:https://mp.weixin.qq.com/s/zioDo0hNo9Td2tVFAGtDzA


一、为什么必须升级HTTP/2?

HTTP/1.1存在严重的队头阻塞 问题:浏览器限制同一域名下最多只有6个并发连接。当页面需要加载大量静态资源时,多余的请求只能排队等待,页面加载速度受限。

HTTP/2引入了多路复用技术,彻底解决了这个问题:

特性 HTTP/1.1 HTTP/2
并发模型 一个连接一个请求(受6连接限制) 一个TCP连接多路复用多个请求
队头阻塞 存在 不存在
头部压缩 HPACK压缩,减少头部大小
服务器推送 不支持 支持Server Push主动推送资源

升级收益:减少6个连接的限制?HTTP/2下,所有资源理论上可以同时并行传输。


二、编译Nginx模块检查

开启HTTP/2需要两个关键模块:

模块 作用 是否必须
http_v2_module HTTP/2协议支持 ✅ 必须
http_ssl_module SSL/TLS加密支持 ✅ 必须

检查是否已编译

复制代码
# 查看Nginx版本
nginx -V

# 检查是否有http_v2模块
nginx -V 2>&1 | grep -o with-http_v2_module

# 检查OpenSSL版本(需≥1.0.2)
openssl version

如需重新编译

复制代码
# 添加HTTP/2和SSL模块
./configure --prefix=/usr/local/nginx \
    --with-http_v2_module \
    --with-http_ssl_module \
    --with-http_realip_module \
    --with-http_stub_status_module

make && make install

三、HTTP/2核心配置

基础配置

复制代码
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name www.site.com;
    
    root /var/www/html;
    index index.html index.htm;
    
    # SSL证书(必须是完整证书链)
    ssl_certificate /etc/nginx/cert/www.site.com.fullchain.pem;
    ssl_certificate_key /etc/nginx/cert/www.site.com.privkey.key;
    
    # 其他站点配置...
}

HTTPS跳转配置(可选)

复制代码
# HTTP 301跳转到HTTPS
server {
    listen 80;
    server_name www.site.com;
    return 301 https://$server_name$request_uri;
}

四、SSL/TLS性能优化

HTTP/2依赖SSL/TLS,合理的SSL配置既能提升性能又能保证安全性:

复制代码
server {
    listen 443 ssl http2;
    server_name www.site.com;
    
    # SSL证书
    ssl_certificate /etc/nginx/cert/www.site.com.fullchain.pem;
    ssl_certificate_key /etc/nginx/cert/www.site.com.privkey.key;
    
    # ===== SSL性能优化 =====
    
    # 协议版本(禁用不安全的TLSv1.0/1.1)
    ssl_protocols TLSv1.2 TLSv1.3;
    
    # 加密套件(高性能+安全)
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    
    # 会话缓存(复用TLS连接)
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;
    
    # 缓冲区(4k更利于HTTP/2)
    ssl_buffer_size 4k;
    
    # OCSP Stapling(减少证书验证延迟)
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/nginx/cert/trust-chain.pem;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;
    
    # HSTS(强制HTTPS)
    add_header Strict-Transport-Security max-age=31536000;
    
    # 其他配置...
}

SSL参数说明

参数 推荐值 作用
ssl_protocols TLSv1.2 TLSv1.3 禁用不安全的老协议
ssl_session_cache shared:SSL:10m 10MB共享内存缓存TLS会话,复用连接
ssl_buffer_size 4k 降低握手overhead,提升HTTP/2传输效率
ssl_stapling on 服务端验证证书,减少客户端验证延迟

五、验证HTTP/2是否生效

方法一:浏览器验证

复制代码
1. 打开Chrome → F12 → Network标签
2. 刷新页面
3. 查看Protocol列,显示 h2 即为生效

方法二:curl验证

复制代码
# 使用--http2参数测试
curl -I --http2 https://www.site.com

# 返回以下内容表示成功
HTTP/2 200
content-type: text/html
...(其他响应头)

方法三:在线检测

复制代码
# 使用SSL Labs检测
https://www.ssllabs.com/ssltest/

# 查看HTTP/2支持状态
✅ HTTP/2 supported

六、常见问题排查

问题 原因 解决方案
协议显示HTTP/1.1 Nginx未编译http_v2_module 重新编译Nginx添加模块
SSL握手失败 OpenSSL版本过低 升级OpenSSL到1.0.2以上
证书报错 不是完整证书链 使用fullchain.pem证书文件
旧浏览器不支持 IE11及以前不支持 Nginx自动降级到HTTP/1.1

七、优化建议清单

  • Nginx版本≥1.9.5,OpenSSL版本≥1.0.2
  • 编译时添加 --with-http_v2_module --with-http_ssl_module
  • SSL配置添加会话缓存和OCSP Stapling
  • 禁用不安全的TLSv1.0/1.1协议
  • 使用完整证书链(fullchain.pem)
  • 升级后务必用 nginx -t 测试配置

关注「运维之美」

获取更多Nginx性能优化实战技巧

相关推荐
小雨下雨的雨12 小时前
iOS风格计算器 - 鸿蒙PC Electron框架上的技术实现详解
游戏·ios·华为·electron·harmonyos·鸿蒙
人月神话Lee14 小时前
【图像处理】一文带你窥探近期火热图像App的主要实现原理:主色提取——从图像到调色板
ios·ai编程·图像识别
上海云盾-小余1 天前
SSL 证书部署误区避坑:加密部署与防劫持落地教程
网络协议·iphone·ssl
2601_955767421 天前
iPhone 17 全系屏幕光学特性与保护膜选型技术分析
ios·ar·iphone·圆偏振光护眼·iphone17护眼钢化膜·#观复盾护景贴
2501_915909061 天前
深入解析Mock.js:功能、应用及实战案例,提升前端开发效率
android·ios·小程序·https·uni-app·iphone·webview
pop_xiaoli1 天前
【iOS】通知传值实现
macos·ios·xcode
2601_955767421 天前
iPhone 17 屏幕偏振光学解析与保护贴技术选择——悟赫德观复盾护景贴
人工智能·科技·ios·ar·iphone·圆偏振光
qq3621967052 天前
手机App下载安装完全指南:2026最新教程(Android & iOS)
android·ios·智能手机