下面我将以最主流的 Nginx 服务器 + Linux 系统 + 免费 SSL 证书 为例,带你走通全流程。
📋 核心流程概览
- 域名准备:购买与实名认证。
- DNS 解析:将域名指向服务器 IP。
- 环境准备:云服务器安全组放行端口。
- 证书获取:申请 SSL 证书(获取
.crt和.key文件)。 - Nginx 配置:部署证书并开启 HTTPS。
- 验证与跳转:确保 HTTP 自动跳转至 HTTPS。
第一步:域名准备与 DNS 解析
在配置服务器之前,必须确保你的域名已经指向了你的云服务器公网 IP。
- 域名购买与备案:
- 在国内服务器(如阿里云、腾讯云)上,域名必须完成 ICP 备案 才能正常解析访问。
- 完成实名认证。
- 添加 DNS 解析记录:
- 登录你的域名服务商控制台(DNS 管理)。
- 添加一条 A 记录。
- 主机记录:填
@(代表主域名)或www。 - 记录值:填写你云服务器的 公网 IP 地址。
- TTL:默认即可(通常 10 分钟)。
- 验证方法:在电脑终端输入
ping 你的域名,如果返回的是你的服务器 IP,说明解析生效。
第二步:云服务器安全组放行 (关键)
很多时候配置好了却无法访问,都是因为云厂商的“防火墙”(安全组)没开。
- 登录云服务器控制台(如阿里云 ECS 或腾讯云 CVM)。
- 找到 安全组 配置。
- 放行以下端口:
- 80 端口 (TCP):用于 HTTP 访问,也是申请免费证书时验证域名所有权的必经之路。
- 443 端口 (TCP):用于 HTTPS 加密访问。
- 注意:如果你服务器内部开启了防火墙(如
firewalld或ufw),也需要在系统内部放行这两个端口。
第三步:申请 SSL 证书
你有两种主流方式获取证书,推荐使用 方式 A(云厂商控制台申请),文件管理更直观。
方式 A:云厂商控制台申请(推荐)
阿里云、腾讯云等每年提供 20 个免费的单域名证书(有效期通常为 3 个月或 1 年,视政策而定)。
- 进入云控制台的“SSL 证书”或“数字证书管理服务”页面。
- 点击 申请免费证书。
- 填写域名,选择 DNS 验证(系统会自动检测你的 DNS 解析,或者让你手动添加一条 TXT 记录)。
- 审核通过后(通常几分钟),在证书列表点击 下载。
- 选择 Nginx 服务器类型下载。
- 解压后你会得到两个关键文件:
.crt或.pem文件(公钥,包含证书链)。.key文件(私钥)。
- 解压后你会得到两个关键文件:
方式 B:使用 Certbot 在服务器上直接申请
如果你习惯命令行,可以使用 Let's Encrypt 的 Certbot 工具,它会自动处理验证和续期。
- 安装:
sudo apt install certbot python3-certbot-nginx(Ubuntu) - 命令:
sudo certbot --nginx -d yourdomain.com - 注:Certbot 会自动帮你修改 Nginx 配置,如果成功,可以直接跳到第六步验证。
第四步:上传证书到服务器
如果你使用的是 方式 A,需要将下载好的证书上传到服务器。
- 在服务器上创建目录:
sudo mkdir -p /etc/nginx/ssl/ - 使用 SFTP 工具(如 Xftp, FinalShell)或
scp命令,将下载的.crt(或 .pem) 和.key文件上传到该目录。
第五步:Nginx 配置与部署
这是核心环节,我们需要修改 Nginx 配置文件来“接管” HTTPS 流量。
-
打开 Nginx 配置文件(通常在
/etc/nginx/conf.d/或/etc/nginx/sites-available/下):sudo vim /etc/nginx/conf.d/your_domain.conf -
复制并修改以下配置(请替换你的域名和证书路径):
# 1. 强制 HTTP 跳转到 HTTPS (监听 80 端口) server { listen 80; server_name yourdomain.com www.yourdomain.com; # 替换为你的域名 # 301 重定向,确保所有流量都走加密通道 return 301 https://$server_name$request_uri; } # 2. HTTPS 配置 (监听 443 端口) server { listen 443 ssl http2; # 开启 http2 提升性能 server_name yourdomain.com www.yourdomain.com; # --- SSL 证书配置 --- # 指向刚才上传的证书文件路径 ssl_certificate /etc/nginx/ssl/your_domain.crt; # .crt 或 .pem ssl_certificate_key /etc/nginx/ssl/your_domain.key; # --- 安全优化 (可选) --- ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_prefer_server_ciphers off; # --- 你的网站业务配置 --- root /var/www/html; # 你的网站文件路径 index index.html index.htm; location / { try_files $uri $uri/ /index.html; # 适配 Vue/React 等单页应用 } # 如果是反向代理后端 API,可配置: # location /api/ { # proxy_pass http://127.0.0.1:3000; # proxy_set_header Host $host; # } } -
验证并重载配置:
- 先检查配置是否有语法错误:
sudo nginx -t - 如果显示
syntax is ok,则重载 Nginx 使其生效:sudo nginx -s reload # 或者 sudo systemctl reload nginx
- 先检查配置是否有语法错误:
第六步:最终验证
- 浏览器访问:输入
https://你的域名。 - 检查锁头图标:地址栏应显示一把锁,点击可查看证书信息,显示“连接是安全的”。
- 自动跳转测试:尝试输入
http://你的域名(不带 s),看是否会自动变成https://。
💡 常见问题排查
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 浏览器提示“连接不安全” | 证书未生效或配置错误 | 检查 .crt 和 .key 路径是否正确,文件内容是否完整。 |
| 无法访问 443 端口 | 安全组未放行 | 再次检查云服务器控制台的“安全组”规则,确保 TCP 443 允许入站。 |
| 证书过期 | 免费证书有效期短 | 阿里云/腾讯云免费证书通常 3 个月一签,需设置提醒手动续期;或使用 Certbot 自动续期。 |
| 混合内容警告 | 页面内引用了 HTTP 资源 | 检查网页代码(HTML/CSS/JS),将所有 http:// 的资源链接改为 https:// 或 //。 |