Nginx的错误日志是排查SSL问题的核心线索,通常位于/var/log/nginx/error.log。使用以下命令实时查看SSL相关错误(如证书缺失、权限问题、协议不匹配等):
sudo tail -f /var/log/nginx/error.log | grep -i "ssl"
根据日志中的具体错误信息(如SSL routines::wrong version number、certificate verify failed),可快速定位问题根源。
/etc/nginx/sites-available/default或/etc/nginx/conf.d/your-site.conf)中的ssl_certificate(证书文件,如.crt或.pem)和ssl_certificate_key(私钥文件,如.key)指令,确保路径指向正确的证书文件(Ubuntu下通常存放在/etc/nginx/ssl/目录)。www-data)读写,避免其他用户访问。执行以下命令修正权限:sudo chmod 600 /etc/nginx/ssl/your_domain.crt
sudo chmod 600 /etc/nginx/ssl/your_private_key.key
sudo chown root:www-data /etc/nginx/ssl/your_domain.crt # 所有者为root,组为www-data
openssl x509 -in /etc/nginx/ssl/your_domain.crt -text -noout # 检查证书内容
openssl rsa -in /etc/nginx/ssl/your_private_key.key -check # 检查私钥
若输出显示证书/私钥无效(如unable to load certificate),需重新申请或修复证书。openssl x509 -in /etc/nginx/ssl/your_domain.crt -noout -dates
若证书已过期,需联系证书提供商续签。若证书链不完整(如缺少中间证书),客户端(如浏览器)会提示“证书不受信任”。需将CA提供的中间证书追加到你的证书文件中(顺序:服务器证书→中间证书→根证书):
cat /etc/nginx/ssl/your_domain.crt /etc/nginx/ssl/intermediate.crt > /etc/nginx/ssl/fullchain.pem
然后修改Nginx配置中的ssl_certificate指令,指向合并后的fullchain.pem文件。
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
ssl_prefer_server_ciphers on;
修改后需测试配置语法:sudo nginx -t
若语法正确,重启Nginx使配置生效:sudo systemctl restart nginx
若服务器启用了防火墙(如ufw、iptables),需确保允许443端口(HTTPS)的入站流量:
sudo ufw allow 'Nginx Full' # 允许HTTP(80)和HTTPS(443)
sudo ufw enable # 启用防火墙
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo service iptables restart
使用在线工具(如SSL Labs Server Test)检测服务器SSL配置的安全性,确认协议版本、加密套件、证书链等是否符合标准。根据工具报告调整Nginx配置,优化SSL安全性。