📢前言
HTTPS 这件事,现在真的不是「要不要做」的问题了,而是「必须做」。Chrome 直接给 HTTP 站点打上「不安全」标签,Google 把 HTTPS 纳入排名因素,Facebook Pixel、Google Analytics 这些第三方工具也要求必须是 HTTPS。做外贸的都知道,客户很可能第一眼看到浏览器地址栏那个红色的「不安全」就直接关掉了——连询盘表单都不敢填。这篇文章我来手把手教你零成本搞定 HTTPS,配好之后真的可以做到永远不用再操心。
一、🔒 HTTPS 为什么必须装
不装 HTTPS,真的不是「少个锁标志」这么简单。
我刚开始做外贸站的时候,觉得 HTTPS 是「锦上添花」的东西,结果第一个站点上线没几天就发现问题:
| 影响 | 具体后果 |
|---|---|
| 🔴 浏览器直接警告 | Chrome 在地址栏显示「不安全」,访客立马失去信任 |
| 🔴 询盘表单不可用 | 现代浏览器禁止 HTTP 页面提交敏感数据,客户填了表提交不了 |
| 🔴 Google SEO 降权 | Google 明确把 HTTPS 作为排名信号,没HTTPS的直接往后排 |
| 🔴 第三方工具无法集成 | Facebook Pixel、Google Analytics 都要求 HTTPS |
| 🔴 数据传输裸奔 | 用户输入的密码、邮箱在网络中明文传输,太危险了 |
| 🟡 PCI 合规问题 | 如果要接支付功能,PCI DSS 强制要求 HTTPS |
说白了:不装 HTTPS,网站基本等于废了。好消息是整个过程免费,而且装好之后真的可以当甩手掌柜。
📋 SSL 证书类型一览
| 类型 | 验证级别 | 价格 | 适合场景 |
|---|---|---|---|
| DV(域名验证) | 只验证你拥有这个域名 | 免费(Let's Encrypt) | 外贸站、博客、个人网站 |
| OV(组织验证) | 验证域名 + 公司信息 | $50-200/年 | 中大型企业 |
| EV(扩展验证) | 深度验证公司资质,地址栏显示公司名 | $100-500/年 | 金融、电商平台 |
| 通配符证书 | 一个证书覆盖主域名和所有子域名 | $50-300/年 | 多子域名站点 |
💡 外贸站选什么:我做过几十个外贸站,DV 证书完全够用。EV 证书虽然能在地址栏显示公司名,但价格贵、维护麻烦,外贸 B2B 站真没必要折腾。把钱省下来投广告不香吗?
二、🚀 Let's Encrypt 完全配置指南
Let's Encrypt 是由非营利组织 ISRG 运营的证书颁发机构,免费签发 DV 证书,全球数千万网站都在用。有效期 90 天,但配置好自动续期后,真的可以永久不用管它。
我所有个人项目和客户的外贸站,90%都用 Let's Encrypt,稳得很。
🖥️ 方案一:主机控制面板一键安装(推荐新手)
这是最简单的方式,适合不想碰命令行的同学。
cPanel(SiteGround、Bluehost 等)
- 登录 cPanel
- 找到 SSL/TLS Status 或 AutoSSL
- 勾选你要安装证书的域名
- 点击 Run AutoSSL
- 等 1-2 分钟,状态变绿色 ✅
⚠️ 踩坑提醒:有些 cPanel 主机的 AutoSSL 是按域名收费的!我之前用的一款主机看起来便宜,结果 AutoSSL 每个域名收 $10/年。SiteGround 免费版的 AutoSSL 只覆盖主域名,子域名要另外处理,买之前一定问清楚。
宝塔面板(国内用户很多)
- 登录宝塔面板
- 点击 网站 > 选择对应站点 > 设置 > SSL
- 选择 Let's Encrypt 选项卡
- 勾选域名(通常包括
example.com和www.example.com) - 点击 申请,等 1 分钟左右
- 勾选 强制 HTTPS,开启自动跳转
宝塔真的香,我帮客户迁移的几个 WordPress 站都用宝塔,SSL 配置几分钟搞定。
Cloudways
- 登录 Cloudways 后台
- 进入 Application > SSL Certificate
- 点击 Install Certificate
- 选择 Let's Encrypt,填入邮箱
- 点击 Install,等完成
Cloudways 是我主力在用的托管平台,SSL 一键配置,续期全自动,省心。
💻 方案二:Certbot 命令行安装(适合 VPS 用户)
适合在 VPS 上手动配置 Nginx 或 Apache 的同学。我自己用的 Linode VPS 就是这么配的。
第一步:安装 Certbot
# Ubuntu/Debian + Nginx
sudo apt update
sudo apt install certbot python3-certbot-nginx
# Ubuntu/Debian + Apache
sudo apt install certbot python3-certbot-apache
第二步:申请并自动配置证书
# Nginx(Certbot 会自动修改 Nginx 配置)
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
# Apache(Certbot 会自动修改配置)
sudo certbot --apache -d yourdomain.com -d www.yourdomain.com
执行后会提示:
- 输入邮箱(用于证书到期提醒,一定要填真实的)
- 同意服务条款
- 选择是否自动跳转 HTTPS(选 2,自动重定向)
第三步:验证自动续期是否配置成功
# 测试续期(--dry-run 不会真的续,只测试配置)
sudo certbot renew --dry-run
# 查看 certbot 定时器状态
sudo systemctl status certbot.timer
如果输出显示 running 和下一次执行时间,说明自动续期已配置好。
💡 原理说明:Certbot 安装时会创建一个 systemd timer 或 cron job,每隔 12 小时检查证书是否快到期(< 30 天),快到期就自动续。所以你配置好之后,真的可以永远不再管它——我配了十几个站,两年多了没管过,全部自动续期成功。
🔌 方案三:WordPress 插件安装(完全不想碰服务器的选这个)
适合不想折腾服务器配置的同学。
| 插件 | 适合场景 | 特点 |
|---|---|---|
| Really Simple SSL | 零基础用户首选 | 一键搞定,自动修复混合内容 |
| WP Encrypt | 简单场景 | 只负责申请证书,不处理重定向 |
| SSL Insecure Content Fixer | 辅助修复混合内容 | 配合其他方案使用 |
Really Simple SSL 使用步骤
- 插件 > 安装插件 > 搜索 Really Simple SSL > 安装并启用
- 插件检测到网站未使用 SSL,会弹窗提示
- 点击 启用 SSL
- 插件会自动:
- 把所有 HTTP URL 替换成 HTTPS
- 配置 301 重定向(HTTP → HTTPS)
- 修复混合内容问题
- 去 设置 > SSL,确认显示绿色 ✅
⚠️ 踩坑经验:Really Simple SSL 在某些主题下会触发「重定向次数过多」的报错。我遇到过两次,都是在用 Avada 主题的时候。解决方法是先停用插件,手动修复混合内容(见下一节),再重新启用。
三、🔧 混合内容修复(最常见的问题,90%的人都踩过)
❓ 什么是混合内容
混合内容(Mixed Content)就是 HTTPS 页面里引用了 HTTP 资源。浏览器检测到「明明是安全页面,却加载了不安全的内容」,就会发出安全警告。
我之前帮一个客户排查问题,他的站明明装了 SSL,地址栏就是不显示锁标志。一查 Console,好家伙,十几条混合内容警告——主题里硬编码了 HTTP 的图片地址,插件引用了 HTTP 的 JS 文件...
混合内容分两类:
- 主动混合内容:JS、CSS、iframe——会直接阻断,浏览器完全拒绝加载
- 被动混合内容:图片、音视频——显示警告,浏览器仍然加载但会提示
🔍 如何发现混合内容
方法一:Chrome 开发者工具(我最常用的)
- 用 Chrome 打开你的 HTTPS 网站
- 按 F12 打开开发者工具
- 切换到 Console 标签
- 如果有混合内容,会显示黄色警告:
Mixed Content: The page at 'https://...' was loaded over HTTPS,
but requested an insecure resource 'http://example.com/image.jpg' - 点击文件名,查看具体是哪个资源有问题
方法二:SSL Labs 在线检测
访问 ssllabs.com/ssltest/,输入域名,可以生成完整的安全报告。这个工具超好用,我每配置完一个站都会跑一遍。
方法三:地址栏锁标志提示
地址栏不显示锁标志时,点击那个小图标,里面会写清楚具体原因。Chrome 的提示越来越友好了,直接告诉你哪里有问题。
🛠️ 混合内容修复步骤
第一步:备份数据库(⚠️ 必须!必须!必须!)
这个步骤我强调三遍,因为真的有人跳过这步然后哭着找我...
-- 用 phpMyAdmin 或命令行执行
-- 先完整备份,再用这个替换
UPDATE wp_posts
SET post_content = REPLACE(post_content, 'http://yourdomain.com', 'https://yourdomain.com');
UPDATE wp_posts
SET guid = REPLACE(guid, 'http://yourdomain.com', 'https://yourdomain.com');
UPDATE wp_postmeta
SET meta_value = REPLACE(meta_value, 'http://yourdomain.com', 'https://yourdomain.com');
⚠️ 关于 GUID:网上有人说 GUID 不应该改,但我实际操作下来,不改 GUID 有时候会出现奇怪的问题。我的做法是:先完整备份数据库,然后执行替换,测试几天没问题就不管了。万一有问题,恢复备份就行。
第二步:安装 Really Simple SSL 自动修复
安装并启用后,插件会自动处理大量常见的混合内容问题。但别指望它能 100% 解决,有些硬编码的链接还是要手动处理。
第三步:手动检查主题和插件中的硬编码链接
用 FTP 或文件管理器,检查以下位置:
| 检查位置 | 查找内容 | 修复方法 |
|---|---|---|
主题 functions.php | 搜索 http:// | 改为 https:// 或 // |
| 主题自定义 CSS | url('http://...') | 改为 url('//...') |
| 页脚/页眉模板 | 外部 JS 引用 | 检查是否支持 HTTPS |
| 插件模板文件 | 硬编码图片路径 | 改用 HTTPS 或相对路径 |
我的经验:很多老旧主题喜欢把图片地址硬编码成 http://,特别是页脚 logo、社交图标这些地方。我通常用 VS Code 全局搜索 http://,一个一个检查改掉。
第四步:用 Content-Security-Policy 头强制升级(进阶)
在 Nginx 配置里加一行,浏览器会自动把所有 HTTP 请求升级为 HTTPS:
add_header Content-Security-Policy "upgrade-insecure-requests";
加完之后记得测试,有些老旧插件可能因此加载失败。
四、⏰ 证书续期管理
Let's Encrypt 的证书有效期是 90 天。配置好自动续期后,每年会有 4 次自动续期操作,你不需要任何操作。
📊 续期机制说明
| 参数 | 值 | 含义 |
|---|---|---|
| 证书有效期 | 90 天 | 比传统证书短,但免费续 |
| 自动续期触发 | 到期前 30 天内 | 避免不必要的续期 |
| 续期方式 | systemd timer / cron | Certbot 安装时自动配置 |
| 续期失败通知 | 邮件提醒 | 邮箱填写正确即可 |
🖥️ 常用管理命令
# 查看所有已安装证书及过期时间
sudo certbot certificates
# 测试续期(dry-run,不真的续)
sudo certbot renew --dry-run
# 手动强制续期(如果测试失败,手动跑一次)
sudo certbot renew
# 查看 certbot 定时任务
sudo systemctl list-timers | grep certbot
🌐 在线监控工具
| 工具 | 用途 | 网址 |
|---|---|---|
| SSL Labs | SSL 配置质量评估,目标 A+ | ssllabs.com/ssltest |
| UptimeRobot | SSL 证书到期免费提醒 | uptimerobot.com |
| Why No Padlock | 混合内容检测 | whynopadlock.com |
💡 我的建议:把 SSL Labs 的评分当作「体检报告」,目标是拿到 A+。如果评分低于 B,先看报告里的具体问题,通常是配置不当导致的。我刚开始配置的时候经常拿 C,后来学会调整加密套件、启用 HSTS,现在都是 A+。
五、🚑 故障排查表(遇到问题先看这里)
| 问题现象 | 原因 | 解决方法 |
|---|---|---|
| 证书申请失败 | DNS 未生效 / 80 端口未开放 | 先确认域名已解析;检查防火墙放行 80 和 443 |
| 申请通配符证书失败 | 通配符需要 DNS-01 验证方式 | 用 certbot --manual --preferred-challenges dns |
| 混合内容警告还在 | 数据库改完了但 CDN 层还是 HTTP | 清理 Cloudflare 缓存(Cache > Purge Everything) |
| 证书链不完整 | 中间证书缺失 | 用 SSL Labs 检测后,重新安装证书 |
| 自动续期失败 | certbot.timer 没有运行 | sudo systemctl enable --now certbot.timer |
| 浏览器仍显示不安全 | 部分第三方资源(CDN/字体)未改 HTTPS | Chrome Console 逐条排查 |
| AutoSSL 不覆盖子域名 | 免费版限制 | 升级面板方案,或用 Certbot 手动申请通配符证书 |
| 证书到期没收到邮件 | 邮箱填错 / 进垃圾箱 | 检查 certbot 配置的邮箱;查垃圾箱 |
我的踩坑案例:有一次客户的外贸站证书到期没自动续,排查了半天发现是服务器时间不对(比真实时间快了 2 小时),导致 Certbot 认为还没到续期时间。校准时间后问题解决。这个坑很隐蔽,如果你也遇到莫名其妙的续期问题,先检查服务器时间!
六、✅ SSL 配置检查清单
最后配完了,对照这个清单检查一遍:
- [ ] 证书已安装并生效(浏览器地址栏显示锁标志)
- [ ] 点击锁标志 > 连接安全 > 证书有效
- [ ] HTTP 自动跳转到 HTTPS(输入
http://yourdomain.com自动变https://) - [ ] 无混合内容警告(Chrome Console 没有任何报错)
- [ ] SSL Labs 评分达到 A 或 A+
- [ ] 自动续期已配置(
certbot renew --dry-run通过) - [ ] 证书到期前收到提醒邮件(查一下垃圾箱)
- [ ] HSTS 头已配置(可选,配置后更安全但也意味着很难回退到 HTTP)
📝 写在最后
HTTPS 这件事,看起来简单,实际配置起来总有各种各样的小坑。我这篇文章里写的都是我自己踩过的坑、积累的经验。如果你按照这篇文章操作还遇到问题,欢迎评论区留言,我会尽量回复。
记住:SSL 配置好后要定期检查,至少每季度跑一次 SSL Labs 测试,确保一切正常。别等到客户投诉网站显示「不安全」才想起来检查。

混合内容那个坑我踩过,改数据库真的管用👍
之前免费证书都是3个月一续,忘了就完蛋