expose_php = off 是唯一必须修改的配置项,用于禁止 php 在 http 响应头中自动添加 x-powered-by 字段;默认为 on,修改后需重启 php 进程(如 php-fpm)才能生效,仅 reload web 服务器无效。

直接改 expose_php = Off,这是唯一必须改的 PHP 配置项。 其他操作(如删 X-Powered-By 头、关 display_errors)属于补充措施,不改这个参数,PHP 版本号就一定会出现在响应头里。
expose_php = Off 是什么作用
它控制 PHP 是否在 HTTP 响应头中自动添加 X-Powered-By: PHP/x.x.x 字段。设为 Off 后,PHP 内核本身就不会输出这个头 —— 这是源头拦截,不是靠 Web 服务器“擦除”。
- 默认值通常是
On(尤其在源码编译或某些 Docker 镜像中) - 修改后必须重启 PHP 进程(如
php-fpm)或 Web 服务器(如 Apache),仅 reload 不生效 - 不影响命令行下
php -v输出,也不影响phpinfo()页面内容 —— 它只管 HTTP 响应头
为什么只改 expose_php 还不够
即使 expose_php = Off 生效,你仍可能在响应头里看到 X-Powered-By: PHP(没带版本号)或 Server: nginx/1.20.1 这类信息。这是因为:
- Apache/Nginx 自己会加
Server头,和 PHP 无关;需分别配置ServerTokens Prod(Apache)或server_tokens off(Nginx) - 某些框架(如 Laravel、Symfony)或中间件可能手动设置
X-Powered-By;得查代码或中间件配置 - 如果开了
display_errors = On且触发了 PHP 错误,错误页面 HTML 源码里可能含PHP Version字样 —— 所以建议同时关掉display_errors
怎么确认 expose_php 生效了
别信配置文件改没改对,用 curl -I 实测最准:
curl -I https://yoursite.com/any-php-file.php
成功隐藏后的响应头里,不应出现:
X-Powered-By: PHP/8.1.27-
X-Powered-By: PHP(注意:连不带版本号的这行也该消失)
如果还有,优先检查:php -i | grep expose_php 看实际生效的是哪个 php.ini 文件(常有多个,CLI 和 FPM 加载的可能不同);再确认是否重启了 php-fpm 而不是只 reload 了 Nginx。
真正容易被忽略的是:很多运维只改了主 php.ini,却忘了 FPM pool 配置里可能通过 php_admin_value[expose_php] = Off 覆盖了全局设置 —— 这种覆盖优先级更高,也得一并检查。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











