phpEnv的Nginx配置需修改C:\phpEnv\config\vhost\your-site.conf,规则必须置于location块内,重载须通过控制面板点击“重启Nginx”,禁用geo模块但可用map+return实现IP控制。

phpEnv 是 Windows 下的集成环境,其 Nginx 配置路径、重载方式和 Linux 完全不同,直接套用网上常见的 deny all 或 allow 写法大概率不生效——根本原因是 phpEnv 的 Nginx 启动方式不读取全局 nginx.conf 中的 http 块级配置,只加载站点对应的 vhost 文件,且默认禁用了 geo 模块。
确认 phpEnv 使用的是哪个 Nginx 配置文件
phpEnv 的站点配置不走标准 /conf/nginx.conf,而是每个站点单独一个 vhost 文件,路径类似:C:\phpEnv\config\vhost\your-site.conf。必须在这个文件里写规则,改其他地方无效。
- 打开 phpEnv 控制面板 → 点击「网站管理」→ 找到你的站点 → 点击「编辑配置」,它会自动定位并打开正确的
.conf文件 - 不要去改
C:\phpEnv\server\nginx\conf\nginx.conf,那个是主配置,但 phpEnv 默认不启用其中的http块内自定义指令(比如geo) - 检查该
vhost文件里是否已有location /块;如果没有,需手动包裹规则,否则allow/deny无处落脚
在 vhost 里正确使用 allow/deny(注意顺序和位置)
allow 和 deny 必须成对出现在 location 块内,且 deny all 必须写在最后——Nginx 按顺序匹配,先写 deny all 就全拦了。
- 想只允许
192.168.1.100访问整个站点:location / { allow 192.168.1.100; deny all; } - 想禁止
203.203.203.0/24段:location / { deny 203.203.203.0/24; allow all; } - 如果站点用了伪静态(如 WordPress),确保规则放在
location /里,而不是仅放在location ~ \.php$里——后者只能拦 PHP 请求,静态资源仍可直访
phpEnv 下 reload 不生效?别用 nginx -s reload
phpEnv 自带的 Nginx 是以 Windows 服务或控制台进程方式运行的,nginx -s reload 常因权限或路径问题失败,实际应通过控制面板操作。
立即学习“PHP免费学习笔记(深入)”;
- 改完
vhost文件后,**必须点击 phpEnv 控制面板里的「重启 Nginx」按钮**(不是「重载」) - 如果提示「Nginx 启动失败」,八成是语法错误:检查是否有中文标点、漏写分号、
allow/deny是否写在了server块顶层(必须嵌套在location内) - 验证是否生效:用被禁止的 IP 访问,返回
403 Forbidden即成功;若仍能访问,说明配置没加载,回头确认是不是改错了文件
封多个 IP 或动态更新?别硬编码,改用 map + return
phpEnv 不支持 geo 模块(编译时未开启),但可以用 map 指令做轻量级 IP 判断,适合临时加几个黑名单。
- 在
vhost的server块顶部(location外)添加:map $remote_addr $blocked { default 0; 1.2.3.4 1; 5.6.7.0/24 1; } - 在
location /内加判断:if ($blocked) { return 403; } - 注意:
map只能在http或server块顶层声明,不能放在location里;且 phpEnv 的 Nginx 版本需 ≥1.3.0(主流版本都满足)
最易忽略的一点:phpEnv 的 Nginx 默认监听 127.0.0.1:80,如果你从局域网其他机器测试,得先确认 phpEnv 设置里是否勾选了「允许外部访问」,否则连请求都进不到 Nginx 规则层。



















