phpenv 默认不内置 nginx 限流能力,需手动在站点 vhost 配置中添加 limit_conn 或 limit_req,并在 extra/limit.conf 中定义 zone,cdn 下还需配置 real_ip_header 同步真实 ip。

phpEnv 默认不内置 Nginx 限流能力,必须手动编辑其生成的 Nginx 配置文件才能启用 limit_conn 或 limit_req —— 直接在 phpEnv 界面点“限速”或“防攻击”按钮没用,那些功能通常只控制 PHP-FPM 进程数或简单 deny IP,对真实 CC 攻击无效。
phpEnv 的 Nginx 配置文件在哪改
phpEnv 生成的站点配置不在 /usr/local/nginx/conf/vhost/ 这类标准路径,而是在:
→ Windows:打开 C:\phpenv\nginx\vhost\your-site.conf
→ Linux(若你装的是 phpEnv for Linux):实际路径为 /opt/phpenv/nginx/vhost/your-site.conf
注意:不要改 nginx.conf 主文件,它每次 phpEnv 重启会重写;只改对应站点的 vhost/*.conf 文件,且必须在 server 块内添加限流指令。
必须加 limit_conn_zone 到 http 块(否则配置不生效)
phpEnv 的主配置 nginx.conf 里默认没有 limit_conn_zone,你得手动插入——但不能直接改它(会被覆盖),正确做法是:
• 在 /opt/phpenv/nginx/conf/extra/(Linux)或 C:\phpenv\nginx\conf\extra\(Windows)下新建一个 limit.conf
• 写入:
limit_conn_zone $binary_remote_addr zone=perip:10m;
• 然后在
nginx.conf 的 http 块末尾手动加一行:include conf/extra/limit.conf;否则
limit_conn perip 5 会报错:unknown limit_conn_zone "perip"。
limit_req 比 limit_conn 更适合防 PHP 接口刷
phpEnv 托管的 PHP 网站(如 WordPress、ThinkPHP)本质是短连接 + 快速响应,limit_conn 限制并发 TCP 连接反而容易误伤(比如用户开两个标签页就触发);真正该用的是 limit_req 控制请求速率:
• 在站点 vhost 的 location ~ \.php$ 块里加:
limit_req zone=phpreq burst=10 nodelay;
• 对应的
limit_req_zone 要提前定义(同上,在 extra/limit.conf 里):limit_req_zone $binary_remote_addr zone=phpreq:10m rate=2r/s;
• 关键点:
–
rate=2r/s 是防爆破底线,登录页可设为 1r/s,API 接口可放宽到 5r/s–
burst=10 允许用户点“刷新”或表单重试不被拦死– 必须加
nodelay,否则排队会拖慢整个 PHP-FPM 请求队列
CDN 下真实 IP 获取必须同步开启
如果你用了 Cloudflare、又拍云等 CDN,phpEnv 的 Nginx 默认拿到的 $remote_addr 是 CDN 节点 IP,所有限流都会失效:
• 在站点 vhost 的 server 块顶部加:
set_real_ip_from 103.21.244.0/22;<br>set_real_ip_from 103.22.200.0/22;<br>real_ip_header CF-Connecting-IP;
(Cloudflare 官方 IP 段需定期更新,完整列表见
https://www.cloudflare.com/ips-v*)• 然后把所有
$binary_remote_addr 替换成 $binary_remote_addr(它已自动被 real_ip 模块修正)不配这个,你看到日志里全是
103.21.x.x,限流等于锁自己。
最常被跳过的环节是 limit_req_zone 的共享内存定义位置和 CDN 下的 real_ip 同步——这两个一漏,整套配置看起来都写了,实测却完全不触发。别信 phpEnv 界面里的“安全设置”,那只是障眼法。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











