站点挂在 Nginx 反向代理或 HTTPS 后面,有哪些必须改的配置?

最后更新时间:2026-09-22 19:03:37

1. 两个必须改的开关

把 VVCMS 挂在 Nginx / CDN 后面,或者启用 HTTPS 之后,有两个开关必须按实际情况调整。不改不一定立刻报错,但会在特定场景下出很难排查的问题。

2. 开关一:认证锁定的 trust_proxy

后台「安全配置」里的 auth_guard_trust_proxy 决定系统是否采信 X-Forwarded-For / X-Real-IP

部署方式应该设为设错的后果
直连(直接暴露端口)false开成 true 时,攻击者可伪造该头部绕过失败锁定
有 Nginx / CDN 等反向代理true不设 true 时所有请求的来源 IP 都是代理机,一个人输错密码,全站所有人一起被锁

判断标准只有一条:前面有没有反向代理

配套:代理层要正确传递 IP

光打开开关还不够,Nginx 侧必须真的把客户端 IP 传过来,否则开关读到的是空值:

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

3. 开关二:MCP 的 localhost 保护

MCP 自带 DNS rebinding 防护,对应配置项 disable_localhost_protection,默认 false(保留防护)。

行为是:如果服务监听在本机回环地址,但请求的 Host 头是外部域名,MCP 会直接返回 403。

场景建议
通过反向代理以域名访问 MCP设为 true,否则一直 403
服务暴露在浏览器可访问的网络中保持 false,这是防 DNS rebinding 的关键

如果你遇到「本地 curl 正常,走域名就被 403」,基本就是这一条。

4. 其他部署检查项

  • WebSocket / 长连接:如果用到了,代理层要放行 Upgrade 头。
  • 请求体大小:上传大文件时,Nginx 的 client_max_body_size 要相应调大,否则文件还没到应用就被拒了,表现为「上传失败」但应用日志里没有记录。
  • 静态资源缓存/static/ 可以设置较长缓存,但改了主题静态文件后要记得刷新,否则前台还是旧样式。
  • HTTPS 跳转:建议全站统一跳 HTTPS,并与页面的 canonical、sitemap 里的域名保持一致。

5. 排查顺序

  1. 确认代理层传递了真实 IP(看应用日志里记录的来源 IP 是不是客户端的)。
  2. 确认 auth_guard_trust_proxy 与部署方式匹配。
  3. 确认 MCP 的 localhost 保护设置与访问方式匹配。
  4. 确认没有被 429 锁定(锁定表现是全站接口统一返回 429)。