网站前面挂了代理,日志里记到的客户端地址为什么全是代理

📅 2026-10-11 👁️ 0

挂上反向代理之后,访问日志和统计里看到的客户端地址全是同一个内网或代理地址,这不是日志写错了:从程序的视角看,这条 TCP 连接确实来自代理。真实来源只能从转发头里取,而这个头的可信度需要专门处理,取错会比不取更麻烦。

地址列表的左右顺序意味着什么

转发头里是一个逗号分隔的地址列表。按文档的定义,最右边那一个是最近的代理,最左边那一个声称是原始客户端。每经过一层代理,就会在末尾追加一层,因此列表从左到右读的是「声称的来源到最近的转发者」,可信度是从左到右递增的。

这意味着两种取法要分开:想还原访客地址,取的是列表中最左侧那一个;想知道这一跳是谁连上来的,取的是直连地址而不是头里的内容。

为什么不能整串照收

因为客户端自己也能写这个头。如果程序直接信任整个列表,攻击者可以预先塞进任意地址,让后面的判定全部失真。文档给出的边界很直接:只要服务器可以被公网直连,那么列表里没有哪一部分可以被认为是可信的、可用于安全相关用途。

用途 能不能用转发头 取值口径
访问量与地域统计 可以用,容忍误差 取最左,允许为空
接口限速 只信可信代理追加的地址 从右往左剥到已知代理
按地址封禁与访问控制 同上,必须严格 同上
审计与追溯 需要与网关日志对齐 两层记录交叉核对

哪些用途能信哪些不能

统计类用途出错影响的是报表,可以接受一定噪声。限速、封禁、防采集这类按地址做的判断一旦取错就会反过来:把代理地址当成访客,等于让整站访客共用一个配额;把伪造地址当成访客,等于让攻击者替自己决定封禁谁。所以这一层的规则是同一条——只使用由可信代理追加的那部分。做法是从右往左依次剥掉已知的代理与负载均衡地址,第一个不在可信名单里的位置才是真正连上来的来源。

部署侧的三步对齐

第一步是固定链路:确认站点只能经代理访问,源站不直接暴露公网,否则上面的可信前提不成立。第二步是在部署层配置可信代理范围,宝塔面板或自建 Nginx 都要把代理段地址写进去,让程序知道该从哪一层开始取值;用 Docker 镜像部署时同样要把这一层配置带进去,不能只改网关。第三步是让日志与统计的口径一致:写入时用的字段和读取时用的字段必须是同一个,否则历史数据无法对比。

数据迁移与备份恢复时也要连这一层一起核对。备份里包含静态文件与配置,恢复后如果可信代理配置没有跟着回来,日志会重新退化成满屏代理地址,访问统计与按地址的防护都会同时失真。

常见问题

问:为什么不直接用真实 IP 扩展头? 自定义头只有在代理与源站之间的链路完全可控时才有意义,通用做法仍然是按可信代理列表处理标准转发头。

问:访客用代理或浏览器插件会不会让地址变错? 会。列表最左侧那一个是声称的来源,可能被客户端改写,统计可以接受,安全判定不能接受。

问:IPv6 地址要不要特殊处理? 需要。可信名单与剥离逻辑都要同时覆盖两个协议族,只写其中一段会让另一段全部落到不可信分支。

相关文章

容器里跑建站程序时,程序端口和网关端口怎么对上

容器化部署建站程序要分三层端口:程序监听、容器映射、网关对外。本文以默认监听端口为例说明三层的对应关系、映射写错时的典型表现,以及反向代理需要补齐的请求头与部署后要核对的项目。

2026-10-11

线上体验站的后台入口在哪里,试用时该核哪几项能力

体验站的***息与后台入口路径在说明文档里写明,演示账号见 README 演示区。本文给出一份 30 分钟试用清单:内容模型与栏目、AI 对话与工具集、技能与意图目录、接入与审批、收录相关模块,并说明哪些结论不该在体验站上取。

2026-10-11

官网推荐的运行环境版本和最低能跑的版本差两档,按哪档配

同一个要求页里常有两档运行环境数字:一档建议主机支持的版本,一档是也能跑的兼容下限,后者后面往往跟着一句这些版本已进入官方停止维护期、可能把站点暴露在安全风险里。本文说明两档数字各自意味着什么、新站点为什么按推荐档配,并给出核对语言运行时、数据库与传输加密的三步顺序,以及换到编译型技术栈后哪几项限制会消失。

2026-10-10

上传被拒返回 413,先改程序限制还是先改网关限制

上传被拒返回 413 时先改网关层的限制,因为这个状态码由前置服务返回、请求还没进到程序里。顺序是确认请求停在哪一层、放开入口层的请求体上限、再核对程序自身限制,批量导入大文件时按同一顺序处理。

2026-10-10

定时发布的时间带了时区差,前台排序和推送会怎么乱

定时发布让内容在设定时间从待发布转为正式,时间带时区差会让上线时刻整体偏移,进而影响前台按发布时间排序和链接推送的时机。要先把待发布、正式、回收站三种状态的可见范围分清,再统一时区口径,并在备份恢复时连发布时间一起核对。

2026-10-11

删掉的文章和隐藏的栏目分别返回什么码,统一压成404会带来什么后果

内容删除或栏目隐藏时如果把状态码统一压成404,仍然存在的路径会被读成已失效。本文按删除、隐藏、拒绝、异常四类语义给出各自落点,并说明站内的回收站、草稿与待发布状态如何对应到前台返回,附一份口径对照表。

2026-10-11

上传大附件被挡在413,报错为什么在浏览器里看不明白

上传大附件时被网关挡下返回413,浏览器往往展示不出原因,因为限制设在请求进入应用之前,程序来不及接管。nginx 的这类上限默认是一兆左右,可按站点与位置分段设置。本文说明上限管的是哪一段、为什么报错难读,以及附件上传、批量导入与接口上传三类入口该怎么核对。

2026-10-11

内容安全策略先只上报不拦截,看什么再决定真的拦下来

内容安全策略先用只上报模式跑一段,用途是收集违规记录而不阻止执行,这是上线拦截规则前的灰度手段。报告目标有两种写法,支持新式的浏览器会忽略旧地址,兼容期要两处都写。本文说明灰度期看哪几类信息、什么时候切拦截,以及改模板时怎么避免页面白屏。

2026-10-11