解决npm+frp部署WordPress后台多次重定向
本文最后更新于58 天前,其中的信息可能已经过时,如有错误请发送邮件到17671220626@139.com

前言

在搭建个人博客(HomeLab)的过程中,我们经常使用 NPM (Nginx Proxy Manager) 作为网关,通过 frp 内网穿透到家中的服务器。但在配置 SSL 证书后,访问 WordPress 后台常常会遇到“该网页无法正常运作,重定向次数过多”的报错。本文将深入剖析其背后的协议冲突原因,并给出终极解决方案。


一、 故障现象与环境

  • 网络架构:用户 (HTTPS) -> NPM (SSL 卸载) -> frp (HTTP 隧道) -> WordPress (Docker/内网机器)。
  • 报错信息:浏览器提示 ERR_TOO_MANY_REDIRECTS
  • 诡异表现:主页访问正常,但登录 /wp-admin 后台时陷入死循环;内网直接通过 IP 访问却完全正常。

二、 核心原因分析:协议“认知不对等”

这是典型的 SSL 卸载(SSL Termination) 导致的后遗症。

  1. 外部请求HTTPS,但 NPM 在转发给内网时将其转成了 HTTP
  2. WordPress 视角:它收到了一个 HTTP 请求。处于安全考虑,WordPress 默认配置会强制后台使用加密连接,于是它发出指令:“请重定向到 HTTPS 版本的地址”。
  3. 死循环:浏览器收到重定向再次请求 HTTPS -> NPM 再次转成 http 传给后端 -> WordPress 发现还是 HTTP,再次要求重定向。

三、 终极解决方案

要打破这个死循环,我们需要在 Nginx 端传信号,并在 WordPress 端接信号

1. Nginx Proxy Manager 端配置

在 NPM 的 Advanced 配置中,我们需要注入关键的 Header 指令,告诉后端“外网其实是 HTTPS”。

完整 Advanced 配置:

Nginx

# 1. 基础转发设置:确保 Host 域名正确传递
proxy_set_header Host $host;

# 2. 传递真实 IP:让 WordPress 评论区显示正确的访客 IP 而不是 frp 的 IP
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

# 3. 协议透传:告诉后端原始请求是 HTTPS
proxy_set_header X-Forwarded-Proto $scheme;

# 4. 端口透传:告知标准的 HTTPS 端口
proxy_set_header X-Forwarded-Port 443;

# 5. 修复重定向中的 Host 丢失问题
proxy_redirect off;

2. WordPress 端配置(关键补丁)

仅仅在 Nginx 设置是不够的,WordPress 默认不读取 X-Forwarded-Proto。我们需要修改根目录下的 wp-config.php,在 /* That's all, stop editing! */ 之前添加以下强制识别逻辑:

/** 解决 Nginx 反向代理导致的 HTTPS 识别问题 */
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
    $_SERVER['HTTPS'] = 'on';
}

/** 强制定义站点 URL,防止协议降级 */
define('WP_HOME', 'https://你的域名');
define('WP_SITEURL', 'https://你的域名');

/** 强制后台管理界面使用 SSL */
define('FORCE_SSL_ADMIN', true);

3. frp客户端配置

[[proxies]]
name = “name”
type = “http”
localPort = 8080
customDomains = [“example.com”]


四、 总结

解决该问题的核心在于 $_SERVER['HTTPS'] = 'on';。通过在配置文件中手动强制开启这个变量,我们相当于给了 WordPress 一颗“定心丸”,让它意识到自己正处于安全的转发链条中,从而停止无意义的重定向跳转。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇