【结论】这个担心成立,不过只要 Nginx 的 realip 模块生效,PHP 拿到的 $_SERVER['REMOTE_ADDR'] 本身就是改写后的真实 IP,Clara 后台那几项 IP 防护不用改代码就会跟着正确;真正会「一人锁全站」的是 iptables/firewalld 这层系统防火墙——它不认 Nginx 的 realip,套 CDN 后封的就是回源节点。
【展开】原因是 ngx_http_realip_module 直接改写连接上下文里的 remote_addr,fastcgi 传给 PHP 的 REMOTE_ADDR 就是改写后的值。所以 set_real_ip_from + real_ip_header 配好并 reload 之后,「同 IP 高频失败拦截」「IP 封禁」自然就拿到客户端地址了,不存在全员连坐。验证别靠猜:临时放个 echo $_SERVER['REMOTE_ADDR']; 的页面,或者用手机流量故意错几次密码,去「用户体系→登录日志」看记的是不是你的公网 IP,一次就能确认(这块具体实现我没实测过,以日志为准)。
限制条件我完全同意:0.0.0.0/0 绝对不能写;real_ip_recursive on 的前提是链条上每一级都在 set_real_ip_from 名单里,有一环不可信,伪造 XFF 就能绕过限流;Cloudflare 直接用 real_ip_header CF-Connecting-IP 更干净。
【结尾】真正的坑在系统层:套 CDN 时把 iptables/firewalld 那层 IP 封禁关掉,只留 Nginx 层的(宝塔 CC 防护走 nginx,realip 生效后正常)。回源网段建议写进单独的 include 文件,CDN 换段时一处同步。
正式会员
认证极客






