在Nginx服务器上安装SSL证书,首先获取SSL证书:可以通过Certbot自动生成,或者手动上传已有证书获取SSL证书:可以通过Certbot自动生成,或者手动上传已有证书,配置Nginx,修改server块,添加ssl相关指令,监听443端口,配置HTTP重定向到HTTPS,检查配置并重启Nginx,验证安装是否成功,测试HTTPS访问,检查证书有效性,其具体步骤如下,分为自动获取证书(推荐使用Let's Encrypt)和手动安装已有证书两种方式:
一、使用Certbot自动获取并安装SSL证书(Let's Encrypt)
1. 安装Certbot及Nginx插件
bash
复制
Ubuntu/Debian
sudo apt
update
sudo apt install
certbot python3-certbot-nginx
CentOS/RHEL
sudo yum install
epel-release
sudo yum install certbot python3-certbot-nginx
2. 获取并自动配置SSL证书
bash
复制
sudo certbot --nginx
按提示输入邮箱、同意服务条款,并选择需要配置SSL证书的域名。
Certbot会自动完成证书申请、验证,并修改Nginx配置文件启用HTTPS。
3. 验证自动续期
Let's Encrypt证书有效期为90天,Certbot默认配置了自动续期任务,可手动测试:
bash
复制
sudo certbot renew --dry-run
二、手动安装已有SSL证书
1. 准备证书文件
将证书文件(如 domain.crt)和私钥(如 domain.key)上传到服务器,建议存放路径:
bash
复制
sudo mkdir -p
/etc/nginx/ssl
sudo cp
domain.crt /etc/nginx/ssl/
sudo cp domain.key /etc/nginx/ssl/
设置文件权限(确保私钥安全):
bash
复制
sudo chmod 600 /etc/nginx/ssl/domain.key
2. 配置Nginx
编辑Nginx配置文件(通常在 /etc/nginx/sites-available/ 或 /etc/nginx/conf.d/):
nginx
复制
server {
listen 443 ssl;
server_name example.com www.example.com;
SSL证书路径
ssl_certificate /etc/nginx/ssl/domain.crt;
ssl_certificate_key /etc/nginx/ssl/domain.key;
优化SSL配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
keepalive_timeout 70;
其他配置(如root、index等)
root /var/www/html;
index index.html;
}
HTTP重定向到HTTPS
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
3. 检查配置并重启Nginx
bash
复制
sudo nginx -t # 测试配置文件语法
sudo systemctl restart nginx # 重启Nginx
三、验证SSL安装
1. 访问网站:通过浏览器访问 https://example.com,确认锁图标正常。
2. 在线工具检测:使用 SSL Labs测试 检查配置安全性。
3. 命令行验证:
bash
复制
curl -I
https://example.com
openssl s_client
connect example.com:443
常见问题处理
证书链不完整:将中间证书合并到域名证书文件中:
bash
复制
cat domain.crt intermediate.crt >> /etc/nginx/ssl/domain.crt
防火墙未放行443端口:
bash
复制
sudo ufw allow 443/tcp # 使用UFW
配置错误:通过 nginx -t 检查语法,确保所有路径和域名正确。
通过以上三大步骤,就可以为Nginx服务器成功安装SSL证书,确保网站通过HTTPS安全访问。