在 Debian 下 Nginx 使用 SSL 报错是很常见的问题,原因很多。我按最常见的几类给你说明,你对照看看是哪一种,或者直接把报错信息贴出来我帮你精准定位。
sudo nginx -t
sudo systemctl status nginx
sudo journalctl -u nginx -xe
把输出里的 error / emergency 行贴出来。
报错类似:
cannot load certificate "/etc/nginx/ssl/xxx.crt": No such file or directory
✅ 解决:
ls -l /etc/nginx/ssl/
确认:
ssl_certificatessl_certificate_key路径 必须真实存在
推荐结构:
ssl_certificate /etc/ssl/nginx/fullchain.pem;
ssl_certificate_key /etc/ssl/nginx/privkey.pem;
报错:
SSL_CTX_use_PrivateKey_file("...") failed
✅ 检查是否匹配:
openssl x509 -noout -modulus -in fullchain.pem | openssl md5
openssl rsa -noout -modulus -in privkey.pem | openssl md5
两个 md5 必须一样
✅ 使用:
fullchain.pem(不是 cert.pem)Let’s Encrypt 示例:
ssl_certificate /etc/letsencrypt/live/域名/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/域名/privkey.pem;
报错:
SSL_CTX_use_PrivateKey_file("...") failed (SSL: error:0B080074...)
✅ 私钥权限:
sudo chmod 600 /etc/ssl/nginx/privkey.pem
sudo chown root:root /etc/ssl/nginx/privkey.pem
报错:
Address already in use
✅ 检查:
sudo ss -tlnp | grep :443
配置中必须有:
listen 443 ssl;
报错:
no protocols available
✅ 推荐配置:
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/ssl/nginx/fullchain.pem;
ssl_certificate_key /etc/ssl/nginx/privkey.pem;
location / {
root /var/www/html;
index index.html;
}
}
直接贴:
nginx -t 输出journalctl -u nginx 报错server {} 配置我可以 一行一行帮你改到能跑 ✅