
文章目录
结论先行
WordPress HTTPS 配置要做四件事:申请并自动续期证书、排查替换混合内容、把站点地址改成 https 并配 301 强制跳转、在反向代理下用 X-Forwarded-Proto 判断协议。验证标准是浏览器无锁形警告、页面资源全为 https、curl 返回 301 且 Location 正确。
证书申请与续期
2026 年主流是 Let’s Encrypt 的 90 天证书,用 certbot 或 acme.sh 自动签发。不要用付费证书的人工流程,续期会拖垮运维。
用 certbot 签发
Nginx 环境执行:
sudo certbot --nginx -d example.com -d www.example.comApache 把 --nginx 换成 --apache。certbot 会改虚拟主机配置并重载。
用 acme.sh 签发
适合多机同步场景:
curl https://get.acme.sh | sh -s email=admin@example.com
~/.acme.sh/acme.sh --issue -d example.com -w /var/www/html证书落在 ~/.acme.sh/example.com/,fullchain 和 key 分开。
自动续期
certbot 装完自带 systemd timer,查状态:
systemctl list-timers | grep certbot 获取报价
邮箱 + 需求 + 预算区间,24 小时内回复报价。
acme.sh 需加 cron:
0 0 * * * ~/.acme.sh/acme.sh --cron --home ~/.acme.sh踩坑:DNS 解析没生效就签发会失败,先 nslookup 确认。续期后 Nginx 不自动 reload 会旧证书,certbot 的 deploy-hook 里加 nginx -s reload。
混合内容排查
混合内容是 https 页面里加载了 http 资源,浏览器会拦或标不安全。数据库里的老文章、主题硬编码、第三方脚本是三大来源。
数据库替换
用 wp-cli 全站替换,先备份:
wp db export backup.sql
wp search-replace 'http://example.com' 'https://example.com' --all-tables --precise不要直接改 SQL 文件,序列化数据会坏。 给 WordPress 搭一套 Staging 环境:不碰线上数据做试验 可以先在副本上跑 search-replace 验证。
主题插件里的硬编码
用 grep 扫 wp-content:
grep -rn 'http://' wp-content/themes wp-content/plugins --include='*.php' --include='*.js'找到后改成协议相对 // 或直接用 esc_url( home_url() ) 拼接。
浏览器 DevTools 验证
打开 Console,混合内容会报 Mixed Content 错误。Network 面板过滤 scheme:http,看还有哪些请求。
实施步骤:站点地址与强制跳转
- 后台「设置-常规」把 WordPress 地址和站点地址改成 https,或用 wp-cli:
wp option update home 'https://example.com'和wp option update siteurl 'https://example.com'。 - Nginx 加 301 跳转,80 端口 server 块写:
return 301 https://$host$request_uri;。 - Apache 在 .htaccess 加:
RewriteEngine On和RewriteCond %{HTTPS} off与RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]。 - 确认 wp-config.php 里没有
FORCE_SSL_ADMIN冲突,需要后台强制 ssl 就留着 true。 - 清 CDN 和对象缓存,避免跳转被边缘节点缓存。
- 用 curl 验证:
curl -I http://example.com应返回 301 且 Location 是 https。
踩坑:改了 option 但没改服务器跳转,会出现重定向循环。回滚方案:把 option 改回 http,服务器跳转注释掉,重载服务。
反向代理下的判断

前面挂了 Nginx 反向代理、Cloudflare 或负载均衡时,WordPress 收到的是 http,会误判成没开 https,导致后台跳登录或资源出 http。
传真实协议头
代理层加:
proxy_set_header X-Forwarded-Proto $scheme;WordPress 靠 is_ssl() 函数判断,它读 HTTPS 或 X-Forwarded-Proto 为 https 时返回 true。wp-config.php 里补:
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
$_SERVER['HTTPS'] = 'on';
}注意 XML 转义:上面代码块里 && 是源码里的 && 转义写法,实际文件里写两个 & 符号。
验证代理场景
写个 phpinfo 或临时 var_dump($_SERVER['HTTP_X_FORWARDED_PROTO']); 看值。 宝塔 LNMP 部署 WordPress:目录、权限与伪静态一次配好 里也覆盖了反向代理的协议头设置。
常见问题
证书续期后浏览器还是旧证书?
Nginx 没 reload。certbot 的 renew-hook 或 deploy-hook 里加重载命令,或手动 nginx -s reload。
强制跳转后后台进不去?
反向代理没传 X-Forwarded-Proto,WordPress 以为不是 https 反复跳。按上文补协议头和 wp-config 片段。
混合内容改完还有警告?
清 CDN 缓存和浏览器缓存,再查第三方统计、字体、iframe 的 src 是不是 http。
动作清单
- 用 certbot 或 acme.sh 签发证书并配自动续期 timer/cron。
- wp-cli 做 search-replace 清数据库混合内容,grep 扫主题插件硬编码。
- 改 home 和 siteurl 为 https,服务器层配 301 跳转。
- 反向代理环境传 X-Forwarded-Proto 并在 wp-config 设 HTTPS 为 on。
- 上线前用 WordPress 上线前检查清单:26 项逐条过一遍 核对协议与跳转项。
需要专业团队落地 WordPress HTTPS 与运维?见 WordPress 开发服务,我们提供部署、排障与长期维护。
