作者:一位刚刚走完全程的实践者

适用场景:购买了 Windows ECS 云服务器和域名,需要为微信小程序配置 HTTPS(SSL 证书)的新手

第一阶段:准备工作(避免走弯路)

✅ 你需要准备

  1. 阿里云 ECS 实例(本文基于 Windows Server 环境)
  2. 已备案的域名(如果服务器在国内)
  3. 域名已解析到 ECS 公网 IP(A 记录)

🚧 踩坑预警:DNS 解析

坑点:申请证书时 Certbot 报错 DNS problem: NXDOMAIN
原因:域名解析未生效或记录错误
解决

  • 操作位置:本地电脑的浏览器(登录阿里云/域名控制台)
    • 登录域名控制台,确保添加了 A 记录(主机记录 @ 和 www,记录值为 ECS 公网 IP)
  • 验证:本地电脑的命令提示符 (CMD) 或 PowerShell
    ping 你的域名
    
    nslookup 你的域名
    
  • 注意:解析生效可能需要几分钟到几小时,耐心等待

第二阶段:安装 Nginx(Windows 环境)

📥 下载与安装

  1. 操作位置:云服务器(通过远程桌面)的浏览器
    • 访问 nginx.org 下载 Windows 版本(.zip 包)
  2. 操作位置:云服务器的文件资源管理器
    • 解压到不含空格和中文的路径,如 C:\server\nginx\nginx
  3. 操作位置:云服务器的命令提示符 (CMD)(以管理员身份运行)
    • 进入解压目录:cd C:\server\nginx\nginx
    • 启动 Nginx:start nginx

✅ 验证

操作位置:云服务器内的浏览器 或 本地电脑的浏览器

  • 访问 http://你的ECS公网IP,看到 “Welcome to nginx!” 即成功

🚧 踩坑预警:端口被占用

操作位置:云服务器的命令提示符 (CMD)

  • 检查 80 端口是否被占用:netstat -ano | findstr :80

第三阶段:安装 WSL 和 Certbot(关键!)

由于 Certbot 官方已停止支持 Windows 原生版本,我们需要通过 WSL(Windows Subsystem for Linux)来运行 Certbot。

1️⃣ 安装 WSL

操作位置:云服务器的 PowerShell(以管理员身份运行)

wsl --install

重启系统。

2️⃣ 安装 Ubuntu 发行版

操作位置:云服务器的 PowerShell(以管理员身份运行)

wsl --install -d Ubuntu-24.04

注意:如果遇到 WSL2 不支持 的错误,请按以下顺序排查:

  • 启用 Windows 功能:“虚拟机平台”、“Hyper-V”(操作位置:云服务器的 PowerShell 管理员)
  • 确保 BIOS 中开启虚拟化(云服务器需确认实例支持嵌套虚拟化,必要时联系云厂商)
  • 终极解决方案:如果虚拟化实在无法开启,改用 WSL1
    wsl --set-default-version 1
    wsl --install -d Ubuntu-24.04
    

3️⃣ 在 Ubuntu 中安装 Certbot

操作位置:云服务器内的 WSL 终端(Ubuntu)

  • 启动 Ubuntu:可在开始菜单找到 Ubuntu 图标点击,或在 PowerShell/CMD 中输入 wsl
  • 依次执行:
    sudo apt update
    sudo apt install certbot -y
    

第四阶段:申请 SSL 证书

📌 使用 webroot 模式(因为 Nginx 在 Windows 上)

操作位置:云服务器内的 WSL 终端(Ubuntu)

sudo certbot certonly --webroot -w /mnt/c/server/nginx/nginx/html -d 你的域名
  • /mnt/c/ 是 WSL 访问 Windows C 盘的路径
  • -w 后面是你的网站根目录在 Windows 中的实际路径
  • 可添加多个 -d 申请多个域名(如 -d www.你的域名

🚧 踩坑预警 1:80 端口不通

现象:Certbot 报错 Connection refused
排查步骤

  1. 检查阿里云安全组
    操作位置:本地电脑的浏览器(登录阿里云控制台)
    • 确保入方向有 TCP 80/80,授权对象 0.0.0.0/0
  2. 检查 Windows 防火墙
    操作位置:云服务器的 PowerShell(管理员)
    • 允许 80 端口入站:New-NetFirewallRule -DisplayName "Allow HTTP 80" -Direction Inbound -LocalPort 80 -Protocol TCP -Action Allow
  3. 确认 Nginx 是否运行并监听 80
    操作位置:云服务器的命令提示符 (CMD)
    tasklist | findstr nginx      # 看进程
    netstat -ano | findstr :80    # 看监听
    
  4. 从外部测试端口(非常重要)
    操作位置:本地电脑的 PowerShell
    Test-NetConnection 你的域名 -Port 80
    
    显示 TcpTestSucceeded : True 才算通

血的教训:即使安全组和防火墙都配置正确,如果重启了 ECS 但没有重启 Nginx,Nginx 可能没有重新绑定端口,导致端口不通!
解决:每次重启 ECS 后,记得手动启动 Nginx:

cd C:\server\nginx\nginx
start nginx

🚧 踩坑预警 2:域名写错

现象:复制证书时提示 No such file or directory
原因:申请时用的域名和复制时写的域名不一致
解决:仔细核对,证书目录在 /etc/letsencrypt/live/你的实际域名/
操作位置:云服务器内的 WSL 终端

ls -l /etc/letsencrypt/live/

第五阶段:配置 Nginx 启用 HTTPS

1️⃣ 复制证书到 Windows

操作位置:云服务器内的 WSL 终端

sudo mkdir -p /mnt/c/ssl
sudo cp /etc/letsencrypt/live/你的域名/fullchain.pem /mnt/c/ssl/
sudo cp /etc/letsencrypt/live/你的域名/privkey.pem /mnt/c/ssl/

2️⃣ 修改 Nginx 配置

操作位置:云服务器的文件资源管理器 或 文本编辑器(如记事本)

  • 编辑 C:\server\nginx\nginx\conf\nginx.conf
  • 添加以下内容(可参考示例配置):
# HTTP 跳转 HTTPS
server {
    listen 80;
    server_name 你的域名 www.你的域名;
    return 301 https://$host$request_uri;
}

# HTTPS 服务器
server {
    listen 443 ssl;
    server_name 你的域名 www.你的域名;

    ssl_certificate      C:/ssl/fullchain.pem;
    ssl_certificate_key  C:/ssl/privkey.pem;

    location / {
        root   html;
        index  index.html index.htm;
    }
}

3️⃣ 测试并重载

操作位置:云服务器的命令提示符 (CMD)

cd C:\server\nginx\nginx
nginx -t          # 测试配置文件
nginx -s reload   # 重载生效

🚧 踩坑预警:证书文件路径错误

现象nginx -t 报错 cannot load certificate key
原因

  • 文件确实不存在(忘记复制)
  • 路径中的斜杠方向错误(Nginx 在 Windows 下推荐用正斜杠 / 或双反斜杠 \\
  • 权限问题(证书文件无法读取)

解决

  • 操作位置:云服务器的文件资源管理器,检查 C:\ssl 下文件是否存在
  • 操作位置:云服务器的命令提示符,用 type C:\ssl\privkey.pem 测试文件可读性
  • 确认配置中的路径正确。

第六阶段:验证与后续

✅ 验证 HTTPS

操作位置:本地电脑的浏览器

  • 访问 https://你的域名,看到小锁图标即成功!

🔄 关于证书续期(90天有效期)

Certbot 在 WSL 中会自动安装定时任务,每天检查续期。但续期后证书文件会更新,需要:

  • 操作位置:云服务器内的 WSL 终端
    sudo cp /etc/letsencrypt/live/你的域名/*.pem /mnt/c/ssl/
    
  • 操作位置:云服务器的命令提示符 (CMD)
    nginx -s reload
    

进阶方案:编写脚本在续期钩子中自动完成复制和重载,感兴趣的可查阅 Certbot 文档。


📚 总结:你可能会踩的坑(快速自查表)

问题可能原因解决(含操作环境)
DNS problem: NXDOMAIN域名解析未生效本地浏览器登录域名控制台检查 A 记录;本地电脑 CMDpingnslookup 等待生效
Connection refused80 端口不通云服务器:检查安全组(本地浏览器)、防火墙(云服务器 PowerShell)、Nginx 是否运行(云服务器 CMD);本地电脑 PowerShellTest-NetConnection 测试
安全组已配但仍不通未重启 ECS 或 Nginx云服务器 CMD 手动启动 Nginx
No such file or directory域名写错云服务器 WSL 终端 ls /etc/letsencrypt/live/ 核对目录名
cannot load certificate key证书文件缺失或路径错云服务器文件资源管理器检查 C:\ssl云服务器 CMD 确认路径正确
WSL2 安装失败虚拟化未开启云服务器 PowerShell 启用必需功能,或改用 WSL1

更多推荐