Ubuntu 上 Nginx SSL 连接不稳定的排查与修复
一、快速定位问题
sudo tail -f /var/log/nginx/error.logerror_log /var/log/nginx/error.log debug;(生产慎用)openssl s_client -connect yourdomain.com:443 -servername yourdomain.com -showcertsopenssl x509 -noout -modulus -in server.crt | openssl md5openssl rsa -noout -modulus -in server.key | openssl md5curl -Iv https://yourdomain.com(观察是否返回 HTTP/2 200 或握手失败)二、常见根因与对应修复
ssl_certificate 与 ssl_certificate_key 路径正确且匹配。http2 验证是否为 HTTP/2 引发。sudo timedatectl set-ntp true 或 sudo ntpdate ntp.ubuntu.com。sudo apt update && sudo apt upgrade openssl nginx。三、可直接套用的 Nginx 推荐配置
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/yourdomain.com/chain.pem; # 可选,用于 OCSP
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:
ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 1.1.1.1 8.8.8.8 valid=300s;
resolver_timeout 5s;
# 可选:DH 参数(若证书未内置)
# ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
add_header Strict-Transport-Security "max-age=63072000" always;
location / {
root /var/www/html;
index index.html;
}
}
sudo nginx -t && sudo systemctl reload nginxhttp2 做对照测试。四、验证与回归测试
curl -Iv https://yourdomain.com(应见 HTTP/2 200 或稳定握手)openssl s_client -connect yourdomain.com:443 -servername yourdomain.com -tlsextdebug/var/log/nginx/error.log 是否仍有握手异常。