HTTP/2 是 HTTP 协议的重大升级,能显著提高网站性能。本教程将指导您如何在 Nginx 中配置 HTTP/2。
nginx -v
nginx -V # 查看编译参数,确认包含 --with-http_v2_module
编辑您的站点配置文件(通常在 /etc/nginx/sites-available/your_site
或 /etc/nginx/conf.d/your_site.conf
):
server {
listen 443 ssl http2; # 关键:添加 http2 参数
listen [::]:443 ssl http2;
server_name yourdomain.com;
# SSL 配置
ssl_certificate /path/to/your/certificate.crt;
ssl_certificate_key /path/to/your/private.key;
# 推荐的安全配置
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:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# 其他配置...
}
添加以下优化配置:
# 启用 HTTP/2 服务器推送(可选)
http2_push_preload on;
# 调整缓冲区大小
http2_recv_buffer_size 128k;
http2_max_concurrent_streams 128;
http2_max_field_size 16k;
http2_max_header_size 32k;
# 启用 gzip 压缩(与 HTTP/2 兼容)
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
server {
listen 80;
listen [::]:80;
server_name yourdomain.com;
return 301 https://$host$request_uri;
}
nginx -t # 测试配置语法
systemctl reload nginx # 重新加载配置
使用浏览器开发者工具:
使用命令行工具:
curl -I --http2 https://yourdomain.com
应该看到 HTTP/2 200
的响应
在线检测工具:
启用 OCSP Stapling:
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
调整 SSL 会话参数:
ssl_session_tickets off;
考虑使用 TLS 1.3(如果 OpenSSL 支持):
ssl_protocols TLSv1.2 TLSv1.3;
优化资源加载:
问题1:配置后 HTTP/2 不工作
解决:
- 确认 Nginx 版本支持 HTTP/2
- 检查错误日志 tail -f /var/log/nginx/error.log
- 确保 SSL 证书配置正确
问题2:浏览器回退到 HTTP/1.1
解决:
- 检查 SSL 配置,某些旧版 SSL 配置会导致 HTTP/2 不可用
- 确保没有使用已被 HTTP/2 废弃的加密套件
问题3:性能提升不明显
解决:
- 确保所有静态资源也通过 HTTPS 提供服务
- 检查是否有第三方资源拖慢页面加载
- 考虑进一步优化资源加载策略
通过以上配置,您的网站应该能够充分利用 HTTP/2 的多路复用、头部压缩和服务器推送等特性,显著提升加载速度。