在 phpenv 的 nginx.conf 的 http 块中添加 server_tokens off; 并重载配置,可隐藏 nginx 版本号;同时需修改 php.ini 中 expose_php = off 并更新 fastcgi_param server_software 行以彻底消除版本泄露。

直接在 phpEnv 的 Nginx 配置里加 server_tokens off
phpEnv 是 Windows 下集成环境,其 Nginx 配置文件路径通常是 phpEnv\nginx\conf\nginx.conf。默认它**不会关闭版本号**,curl -I 一测就能看到 Server: nginx/1.24.0 这类响应头——这等于主动告诉扫描器你用的是哪个具体版本。
打开该文件,在 http { ... } 块最顶部或任意位置(只要在 http 内)插入一行:
server_tokens off;
注意:别写成 server_tokensoff 或 server_tokens = off,Nginx 不认;也别只加在某个 server 块里——phpEnv 通常有多个虚拟主机(如默认站点、phpMyAdmin),必须放在 http 块才全局生效。
改完必须重载,不能只重启服务
phpEnv 界面点「重启 Nginx」按钮,底层执行的可能是 nginx -s stop && nginx,这会中断连接,且旧进程可能残留。正确做法是手动触发平滑重载:
- 先确认语法:在 phpEnv 安装目录下打开命令行,运行
nginx -t -c nginx/conf/nginx.conf,输出success才继续 - 再重载:运行
nginx -s reload -c nginx/conf/nginx.conf - 验证:用
curl -I http://127.0.0.1查看响应头,应变成Server: nginx(无版本)
如果仍显示版本号,大概率是配置没生效——检查是否改错了文件(比如误改了 sites-enabled 下某个 site 配置,而没动主 nginx.conf)。
PHP 层也要同步隐藏,否则白忙活
即使 Nginx 头部隐藏了,PHP 脚本里仍可能泄露信息:
-
expose_php = On(默认)会让响应头带X-Powered-By: PHP/8.2.12,去phpEnv\php\php.ini改成expose_php = Off - FastCGI 接口默认传
SERVER_SOFTWARE带 Nginx 版本,phpEnv 一般用fastcgi.conf,找到这行:fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
改成:fastcgi_param SERVER_SOFTWARE nginx; - 改完需重启 php-fpm:在 phpEnv 界面点「重启 PHP」,或手动执行
php-fpm -t+php-fpm -s reload(路径依 phpEnv 实际安装位置而定)
别碰源码编译,phpEnv 不支持也不需要
网上有些教程教改 src/core/nginx.h 或重新编译 Nginx 来彻底删掉版本字符串——这对 phpEnv 完全不适用:
phpEnv 自带的是预编译二进制版 Nginx,没有源码、没装编译工具链,强行改源码等于重头搭环境。而且 server_tokens off 已满足绝大多数安全审计要求,WAF 或渗透测试工具扫不到版本号就达成了核心目标。
真正容易被忽略的是 FastCGI 那行 $nginx_version ——很多人只关了 Nginx 头,忘了 PHP 进程里还悄悄透出版本,一查 $_SERVER['SERVER_SOFTWARE'] 就露馅。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











