
WordPress 使用 Nginx(NPM)反向代理时遇到的问题
本文最后更新于 2025-04-02,文章内容可能已经过时。
一、问题描述
假设WordPress以http方式监听服务器上的8080端口,Nginx监听443端口,WordPress网站要求以 https://域名
的形式访问。
Nginx 配置里直接 proxy
会遇到两个问题:
WordPress 网站的 css、js、图片等资源无法加载,浏览器控制台报“mixed content”的错误。这是因为网站以https形式访问,而 WordPress 页面的资源是 http 形式,因此浏览器拒绝加载;
登录 WordPress 管理后台,出现循环重定向,导致登录页和管理后台都无法打开。
经过分析,问题出现的原因分别为:
WordPress 不知道网站通过 https 访问,因此页面中输出的链接是 http 形式;
WordPress 获取到的信息是端口为 8080,而站点设置的端口是 443,因此循环重定向。
二、环境描述
WordPress 网站所在内网地址:http://192.168.50.130:8080
Nginx Proxy Manager 代理地址:https://blog.fxpblogs.win
三、解决方法
1、NPM 代理设置中添加高级设置(Advanced):
location / {
proxy_pass http://192.168.50.130:8080;
proxy_set_header Host $host:$server_port;# 客户端IP
proxy_set_header X-Real-IP $remote_addr; # 反向代理域名
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
client_max_body_size 0;
proxy_redirect off;
}
2、修改 WordPress 的 Docker Compose 目录下的 wp-config.php,在 require_once ABSPATH . 'wp-settings.php';语句前添加(通常在最后面):
// 根据$_SERVER['HTTP_X_FORWARDED_PROTO']判断反向代理过来的是否为https请求
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
$_SERVER['HTTPS']='on'; // 表示当前访问为https
}
// 判断是否访问请求经过代理
if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
$_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST']; // 如果经过代理,需要修改主机地址
}
// 访问后台强制使用https
define('FORCE_SSL_ADMIN', true);
define('CONCATENATE_SCRIPTS', false );
3、进入 WordPress 控制台,设置 WordPress 地址(URL)和站点地址(URL)为 NPM 代理地址,即 https://blog.fxpblogs.win
4、重启 WordPress 容器