Ubuntu Nginx SSL配置常见问题及解决方法
证书文件(如fullchain.pem、.key)的路径配置错误是常见问题。需确保ssl_certificate(证书文件)和ssl_certificate_key(私钥文件)的路径指向正确位置(如Let’s Encrypt证书默认存放在/etc/letsencrypt/live/yourdomain.com/),且私钥文件权限严格限制为600(仅所有者可读)。可通过ls -l /path/to/cert.key检查权限,使用chmod 600 /path/to/cert.key修正。
配置文件中的拼写错误(如ssl on;误写为ssl=on;)、缺少分号或括号会导致Nginx无法启动。使用nginx -t命令测试配置语法,若提示错误,会根据行号定位问题(如nginx: [emerg] invalid number of arguments in "ssl_certificate" directive表示证书路径错误),修正后重新加载配置(systemctl reload nginx)。
443端口被其他服务占用(如Apache)或防火墙(如ufw)未开放443端口,会导致HTTPS无法访问。通过sudo netstat -tulnp | grep 443检查端口占用,若有冲突需停止对应服务;使用sudo ufw allow 443/tcp开放443端口,并确认ufw status显示为“active”。
使用过时的SSL协议(如TLSv1、TLSv1.1)或弱加密套件(如RC4、DES)会降低安全性,甚至被浏览器标记为“不安全”。建议配置为ssl_protocols TLSv1.2 TLSv1.3;(禁用旧协议),ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';(使用强加密套件),并通过ssl_prefer_server_ciphers on;优先使用服务器端加密套件。
若未配置HTTP(80端口)到HTTPS(443端口)的重定向,用户仍可通过不安全的HTTP访问网站。需添加HTTP server块,使用return 301 https://$host$request_uri;实现永久重定向(301跳转),例如:
server { listen 80; server_name yourdomain.com www.yourdomain.com; return 301 https://$host$request_uri; } ```。 ### **6. Let's Encrypt证书未自动续期** Let's Encrypt证书有效期为90天,未设置自动续期会导致证书过期,网站无法访问。可通过`sudo certbot renew --dry-run`测试续订流程,若正常则在`crontab -e`中添加定时任务(每天凌晨检查): ```bash 0 0 * * * /usr/bin/certbot renew --quiet 续订后需重新加载Nginx(systemctl reload nginx)使新证书生效。
自签名证书或证书链不完整(缺少中间证书)会导致浏览器提示“证书不受信任”。需确保证书链完整:
fullchain.pem(包含中间证书)而非单独的cert.pem;intermediate.crt)追加到服务器证书末尾(cat server.crt intermediate.crt > fullchain.crt),并在Nginx中指定ssl_certificate /path/to/fullchain.crt。