用户首先获取SSL证书, 上传证书到服务器,配置Nginx的server块,添加SSL相关参数,设置HTTP重定向到HTTPS,检查配置并重启Nginx,最后验证。下面是用户在Nginx服务器上安装SSL证书的具体步骤,分为手动安装和自动安装(如使用Certbot)两种方式:
一、手动安装SSL证书
1. 准备SSL证书文件
从证书颁发机构(CA)获取以下文件(通常为压缩包):
域名证书文件(如 your_domain.crt)
私钥文件(如 your_domain.key)
中间证书文件(如 CA.crt,可选但推荐合并)
将文件上传到服务器(建议存放在 /etc/nginx/ssl/):
bash
sudo mkdir -p /etc/nginx/ssl/
sudo cp your_domain.crt your_domain.key /etc/nginx/ssl/
2. 合并中间证书(可选)
合并证书文件和中间证书,确保完整信任链:
bash
sudo cat your_domain.crt CA.crt >> /etc/nginx/ssl/your_domain_chain.crt
3. 配置Nginx
编辑Nginx的服务器块配置文件(通常位于 /etc/nginx/sites-available/):
nginx
server {
listen 443 ssl;
server_name your_domain.com www.your_domain.com;
SSL证书路径
ssl_certificate /etc/nginx/ssl/your_domain_chain.crt; # 合并后的证书
ssl_certificate_key /etc/nginx/ssl/your_domain.key;
安全配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
其他配置(如根目录、代理等)
root /var/www/html;
index index.html;
}
HTTP重定向到HTTPS
server {
listen 80;
server_name your_domain.com www.your_domain.com;
return 301 https://$host$request_uri;
}
4. 检查配置并重启Nginx
测试配置语法:
bash
sudo nginx -t
重启Nginx生效:
bash
sudo systemctl reload nginx # 或 sudo service nginx reload
5. 验证安装
访问 https://your_domain.com,确认浏览器显示安全锁图标。
使用在线工具检测(如 SSL Labs SSL Test)。
二、自动安装(使用Certbot)
适用于Let's Encrypt免费证书的自动化部署:
1. 安装Certbot
bash
sudo apt update
sudo apt install certbot python3-certbot-nginx
2. 获取并安装证书
bash
sudo certbot --nginx -d your_domain.com -d www.your_domain.com
Certbot会自动修改Nginx配置并重启服务。
3. 设置自动续期
Let's Encrypt证书有效期为90天,Certbot默认配置定时任务:
bash
sudo certbot renew --dry-run # 测试续期
三、防火墙设置
确保防火墙允许HTTPS流量(端口443):
bash
sudo ufw allow 'Nginx Full' # 允许HTTP(80)和HTTPS(443)
sudo ufw reload
常见问题排查
证书路径错误
检查Nginx配置中的 ssl_certificate 和 ssl_certificate_key 路径是否正确。
权限问题
私钥文件权限应为600:
bash
sudo chmod 600 /etc/nginx/ssl/your_domain.key
配置未生效
确认重启Nginx服务,并检查错误日志:
bash
sudo tail -f /var/log/nginx/error.log
混合内容警告
确保网站内所有资源(图片、CSS等)均通过HTTPS加载。
用户通过以上几个步骤,就可以在Nginx上成功部署SSL证书,实现HTTPS加密访问。