在 Debian 上用 Nginx 做 SSL/HTTPS 访问慢,常见原因可以分为系统侧、Nginx 配置侧、证书侧、网络侧几类。下面按“最常见 → 较少见”给你梳理,并给出排查/解决方法。
如果每次请求都重新握手,会明显变慢。
检查 / 解决
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets on;
重启 Nginx:
systemctl restart nginx
验证:
openssl s_client -connect yourdomain:443 -reconnect
比如:
AES256 + SHA1ECDHE推荐配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
证书链缺中间证书,浏览器会卡顿或重试。
检查
openssl s_client -connect yourdomain:443
看是否提示:
Verify return code: 21 (unable to verify the first certificate)
解决 合并证书:
cat fullchain.pem > /etc/nginx/ssl/yourdomain.pem
老版本 Debian 或虚拟机中常见。
现象
解决
apt install haveged
systemctl enable --now haveged
或:
ssl_engine on;
如果 DNS 返回 AAAA,但网络不支持 IPv6。
表现
解决
listen 443 ssl;
# 不要写:
# listen [::]:443 ssl;
或禁用系统 IPv6。
Nginx → 后端每次新建 HTTPS。
upstream backend {
server 127.0.0.1:8080;
keepalive 32;
}
location / {
proxy_pass https://backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
浏览器去 CA 验证证书状态。
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 valid=300s;
解决
Nginx 配置里用了域名而不是 IP。
proxy_pass https://example.com; # 慢
改成:
proxy_pass https://1.2.3.4;
# 1. 测纯 HTTP
curl -w "%{time_total}\n" http://domain
# 2. 测 HTTPS
curl -w "%{time_total}\n" https://domain
# 3. 看握手时间
curl -w "%{time_connect} %{time_appconnect}\n" https://domain
如果 time_appconnect 很大 → SSL 问题
如果 time_connect 很大 → 网络 / DNS
如果你愿意,可以把 Nginx SSL 配置片段 + Debian 版本 + 是否虚拟机 发我,我可以直接帮你定位是哪一条。