You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

负载均衡器终止HTTPS时配置WordPress强制使用HTTPS

解决负载均衡器终止HTTPS后WordPress链接全为HTTP的问题

我之前也碰到过一模一样的场景——负载均衡器在外层扛HTTPS,后端WordPress只跑HTTP,结果前台后台全是HTTP链接,浏览器直接拦了样式和脚本,折腾了好几种方法都没用,后来终于找到靠谱的解决方式了,给你梳理一下:

为什么会出现这个问题?

WordPress生成链接的时候,是靠$_SERVER全局变量里的HTTPS和SERVER_PORT来判断当前是HTTP还是HTTPS请求的。但负载均衡器已经把HTTPS连接终止了,转发给WordPress的是HTTP请求,所以WordPress默认会认为自己在跑HTTP,自然输出的所有链接都是HTTP的。

你试过的方法为什么无效?

  • upgrade-insecure-requests标签:这个只能让浏览器把HTTP请求主动升级成HTTPS,但WordPress后台的很多核心链接生成逻辑还是会输出HTTP,而且有些后台功能(比如媒体上传、插件更新)依赖正确的站点协议,所以这个方法只能解决部分前台问题,后台根本搞不定。
  • 修改WP_SITEURL和WP_HOME:如果直接硬改成HTTPS地址,可能因为缓存(比如浏览器缓存、服务器缓存、WordPress的对象缓存)导致站点加载异常,而且如果负载均衡器的配置没同步好,也会出问题。

靠谱的解决方案

直接在wp-config.php文件的最顶部(一定要在任何WordPress初始化代码之前)添加以下代码:

$_SERVER['HTTPS'] = 'on';
$_SERVER['SERVER_PORT'] = 443;

这样就能强制让WordPress认为当前请求是HTTPS的,生成的所有链接(包括前台、后台、媒体文件、脚本样式)都会自动变成HTTPS。

如果你的负载均衡器支持传递X-Forwarded-Proto请求头(大部分主流负载均衡器比如Nginx、AWS ALB、Cloudflare都支持),更推荐用下面的动态判断代码,比硬编码更灵活:

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
    $_SERVER['HTTPS'] = 'on';
    $_SERVER['SERVER_PORT'] = 443;
}

这个代码会先检查负载均衡器传来的头,确认是HTTPS请求时再设置相应的$_SERVER变量,这样如果后续站点切换回HTTP也不用改代码。

关于WordPress日志的小补充

如果以后需要看WordPress日志,可以在wp-config.php里开启调试模式:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

开启后,日志会存在wp-content/debug.log文件里,这样就能排查各种加载异常的问题了。

内容的提问来源于stack exchange,提问作者micah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 19:47:58