前置条件:
- 阿里云账号(需实名认证)
- 已在阿里云注册域名或从其他服务商转入
- ECS云服务器(Ubuntu/CentOS系统)
详细操作步骤(包含所有控制台截图位置):
步骤1:登录阿里云控制台
- 访问 阿里云官网
- 点击右上角 控制台 按钮登录
步骤2:申请免费SSL证书
# 控制台操作路径:
1. 产品搜索框输入"SSL证书" → 进入服务
2. 左侧菜单:SSL证书 → 免费证书
3. 点击「创建证书」(首次需要免费领取20个证书额度)
- 证书申请表单:
- 证书绑定域名:填写你的域名(如
yourdomain.com
) - 域名验证方式:选择 DNS验证(推荐)
- CSR生成方式:选择 系统生成
- 证书绑定域名:填写你的域名(如
- 点击「下一步」→ 提交审核(自动审核约1分钟)
步骤3:DNS验证配置
- 申请提交后回到「免费证书」列表
- 找到新申请证书 → 点击「证书申请」
- 复制 主机记录 和 记录值:
记录类型:TXT 主机记录:_dnsauth.example.com 记录值:20240721123456ABCDEF
- 配置域名解析:
# 控制台路径: 1. 进入「云解析DNS」服务 2. 选择域名 → 添加记录 3. 填写复制的TXT记录信息 → 确认
- 等待传播(通常1-5分钟),点击「验证」
步骤4:下载证书文件
- 验证通过后,在「免费证书」列表中找到证书
- 点击 下载 → 选择 Nginx
- 保存压缩包(包含两个文件):
.pem
:证书文件.key
:私钥文件
步骤5:上传证书到服务器
# 使用scp上传(本地终端执行)
scp /本地路径/cert.pem root@服务器IP:/etc/nginx/ssl/
scp /本地路径/cert.key root@服务器IP:/etc/nginx/ssl/
# 或者使用阿里云控制台「文件管理」上传:
1. 进入ECS实例 → 左侧菜单:实例与镜像 → 实例
2. 点击实例ID → 右上角「远程连接」→ VNC登录
3. 右侧菜单 → 文件管理 → 上传文件
步骤6:服务器端目录准备
# 1. 连接到服务器
ssh root@your_server_ip
# 2. 创建SSL证书目录
sudo mkdir -p /etc/nginx/ssl
sudo chmod 700 /etc/nginx/ssl
# 3. 移动证书文件(如果通过文件管理上传)
sudo mv /root/cert.pem /etc/nginx/ssl/
sudo mv /root/cert.key /etc/nginx/ssl/
# 4. 设置安全权限
sudo chown root:root /etc/nginx/ssl/*
sudo chmod 600 /etc/nginx/ssl/cert.key
步骤7:配置Nginx(含安全增强配置)
sudo nano /etc/nginx/conf.d/yourdomain.conf
写入以下配置:
# HTTP强制重定向到HTTPS
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://$server_name$request_uri;
}
# HTTPS主配置
server {
listen 443 ssl http2;
server_name yourdomain.com www.yourdomain.com;
# SSL证书配置
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/cert.key;
# 阿里云免费证书需要添加证书链
ssl_trusted_certificate /etc/nginx/ssl/cert.pem;
# 安全增强配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
# 启用OCSP装订(提高HTTPS性能)
ssl_stapling on;
ssl_stapling_verify on;
# 强加密设置
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
# 网站根目录
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
# 禁止访问.ht文件
location ~ /\.ht {
deny all;
}
}
步骤8:应用配置并测试
# 1. 测试配置文件语法
sudo nginx -t
# 应显示: syntax is OK / test is successful
# 2. 重载Nginx配置
sudo systemctl reload nginx
# 3. 检查端口监听
sudo netstat -tulpn | grep nginx
# 应看到443端口监听
# 4. 测试HTTPS访问
curl -I https://yourdomain.com
# 应返回200 OK
步骤9:安全组配置(关键!)
# 阿里云控制台操作:
1. ECS控制台 → 安全组 → 选择实例使用的安全组
2. 配置规则 → 快速添加规则:
- 选中:HTTP(80)、HTTPS(443)
- 授权对象:0.0.0.0/0
3. 保存规则
步骤10:证书自动续期方案
由于阿里云免费证书有效期1年,需要手动续期。以下是半自动方案:
# 续期操作流程:
1. 证书过期前30天登录阿里云控制台
2. 进入SSL证书 → 免费证书 → 点击「续费」
3. 重新进行DNS验证(操作同步骤3)
4. 下载新证书 → 替换服务器上的旧文件
5. 重载Nginx:sudo systemctl reload nginx
故障排除:
# 1. 报错:SSL证书链不完整
sudo nano /etc/nginx/ssl/cert.pem
# 在证书文件末尾添加中级证书(阿里云下载包中有)
# 格式:
-----BEGIN CERTIFICATE-----
[中级证书内容]
-----END CERTIFICATE-----
# 2. 错误:THE_REDIRECT_LOOP(重定向循环)
检查Nginx配置是否同时存在:
- HTTP强制跳转HTTPS
- HTTPS又跳转其他URL
# 3. 阿里云安全组未开放443端口
通过控制台「安全组检测」功能验证:
ECS实例 → 安全组 → 入方向规则需包含:
协议:HTTPS | 端口:443 | 源:0.0.0.0/0
最佳实践建议:
- 证书管理:使用阿里云「证书托管」功能集中管理
- 密钥安全:每年更换私钥(重新生成CSR申请证书)
- 监控提醒:在证书服务中开启「到期提醒」
- 备份策略:将/etc/nginx/ssl目录备份到OSS对象存储