Nginx未将.php文件交由PHP-FPM处理,导致浏览器直接下载而非执行。需依次确认:PHP-FPM服务是否active(running);location ~ .php$配置是否在生效server块内且fastcgi_pass路径与php-fpm实际监听(socket或端口)一致;SCRIPT_FILENAME参数是否正确、root与index指令是否匹配;文件权限及cgi.fix_pathinfo=0是否设置正确。

PHP 页面被浏览器直接下载,不是执行,说明 Nginx 根本没把 .php 文件交给 PHP 处理器——它只是当普通静态文件吐给了浏览器。这不是 PHP 代码写错了,而是 Nginx 和 PHP-FPM 之间“没接上头”。
确认 PHP-FPM 进程是否在运行
没进程,Nginx 再配对也没用。别跳过这步,很多人改完配置 reload 就以为好了,其实 php-fpm 压根没起来。
- 运行
sudo systemctl status php*-fpm(如php8.2-fpm),看输出里有没有active (running) - 如果报
Unit php8.2-fpm.service could not be found,说明没装或服务名不对,先查系统里实际安装的版本:ls /etc/init.d/ | grep fpm或php -v看版本,再装对应包(如sudo apt install php8.2-fpm) - 启动并设开机自启:
sudo systemctl start php8.2-fpm && sudo systemctl enable php8.2-fpm
检查 Nginx 的 location ~ \.php$ 配置是否生效
这是最常出问题的地方:配置写了,但不在当前生效的 server 块里;或者路径写死了,和实际 root 不匹配;或者用了 include fastcgi_params 却漏了关键参数。
- 确保该
location块在你当前使用的server块内(比如/etc/nginx/sites-enabled/default),而不是注释掉或放在其他未加载的文件里 -
fastcgi_pass必须指向真实存在的 socket 或端口,常见错误:-
unix:/run/php/php8.2-fpm.sock—— 查看ls /run/php/确认文件存在 -
127.0.0.1:9000—— 查sudo netstat -tulpn | grep :9000看端口是否被 php-fpm 监听
-
-
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;这行不能少,且$document_root必须和该server块的root值一致,否则 PHP 找不到文件 - 别用
include snippets/fastcgi-php.conf就以为万事大吉——它只是个快捷方式,内部仍依赖$document_root正确设置
验证 index.php 是否被识别为默认首页
访问域名根路径(如 http://localhost/)时,Nginx 默认只找 index.html,不会自动尝试 index.php,除非你明确告诉它。
- 在
server块里检查是否有index指令,且包含index.php:index index.php index.html; - 如果只写了
index index.html;,那么即使index.php存在,也会 403 或 404,而不是执行 - 注意:这个指令必须在
server块顶层,不能只写在某个location里
权限与 cgi.fix_pathinfo 设置容易被忽略
这两个问题不报错,但会导致 PHP 脚本被当作文件下载,或返回 502/500 却查不到日志。
- PHP 文件本身权限应为
644,所在目录为755;Nginx 工作用户(通常是www-data或nginx)必须有读取权限:sudo chown -R www-data:www-data /var/www/html -
cgi.fix_pathinfo=0必须在 PHP-FPM 的php.ini中设置(通常在/etc/php/*/fpm/php.ini),设为1可能导致路径解析错误,触发安全机制而拒绝执行 - 改完
php.ini后一定要重启php-fpm:sudo systemctl restart php8.2-fpm,reload 不生效
真正卡住的点往往不在“怎么配”,而在“谁在用哪份配置、哪个进程在跑、路径是否闭环”。每改一处,都用 sudo nginx -t 测试语法,用 sudo tail -f /var/log/nginx/error.log 看实时错误,比反复 reload 更快定位到断点。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











