在 Debian 上调试 Nginx + SSL(HTTPS) 通常可以按下面几个层次逐步排查。我按「从简单到深入」给你一个实用清单。
nginx -V 2>&1 | grep -o with-http_ssl_module
如果没有输出,说明 Nginx 没编译 SSL 模块(极少见,Debian 官方包一般都有)。
sudo nginx -t
如有错误,会直接指出文件和行号。
典型 server 段:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
}
listen 443; 但没写 ssl;检查证书和 key 是否匹配:
openssl x509 -noout -modulus -in example.com.crt | openssl md5
openssl rsa -noout -modulus -in example.com.key | openssl md5
两个 md5 必须一致。
sudo tail -f /var/log/nginx/error.log
常见 SSL 错误示例:
SSL_CTX_use_PrivateKey_file → key 路径或权限问题cannot load certificate → 证书格式不对unknown directive "ssl" → 没装 ssl 模块sudo ss -tulnp | grep 443
或
sudo netstat -tulnp | grep 443
Debian 常用:
sudo ufw status
确保 443 允许:
sudo ufw allow 443/tcp
如果是云服务器,还要检查 安全组。
openssl s_client -connect localhost:443 -servername example.com
看是否能拿到证书链。
curl -v https://example.com
或忽略证书(仅测试连通性):
curl -k https://example.com
编辑 /etc/nginx/nginx.conf:
error_log /var/log/nginx/error.log debug;
然后:
sudo nginx -s reload
⚠️ 调试完记得改回 error_log /var/log/nginx/error.log;
| 现象 | 可能原因 |
|---|---|
| 浏览器 ERR_SSL_PROTOCOL_ERROR | listen 没加 ssl |
| 证书不受信任 | 用了自签或链不完整 |
| 502 / 空白页 | SSL 正常但后端问题 |
| 重启失败 | nginx -t 报错 |
如果你愿意,可以把:
nginx -t 输出error.log 相关报错发出来,我可以帮你精准定位问题。