温馨提示×

ubuntu php-fpm为何无法解析

小樊
45
2026-09-19 13:22:50
栏目: 编程语言

在 Ubuntu 上 php-fpm 无法解析 PHP(页面直接下载 / 显示源码 / 404 / 502),通常是Web 服务器没有把 PHP 请求交给 php-fpm 处理。下面按最常见原因逐条说明和排查。


一、最常见原因汇总(先对照)

现象 可能原因
浏览器直接下载 .php Web 未配置 PHP 解析
显示 PHP 源码 PHP 未被执行
502 Bad Gateway php-fpm 未启动 / socket 错
404 路径或 root 配置错误
空白页 PHP 报错但被隐藏

二、确认 php-fpm 是否已安装并运行

1. 是否安装

php -v
php-fpm -v

2. 查看 php-fpm 状态(Ubuntu 常见版本)

systemctl status php8.1-fpm
# 或
systemctl status php-fpm

未运行则:

systemctl start php8.1-fpm
systemctl enable php8.1-fpm

三、Nginx 未配置 PHP(最常见)

正确 Nginx 配置示例(php-fpm socket)

server {
    listen 80;
    server_name example.com;
    root /var/www/html;

    index index.php index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    }
}

⚠️ 关键点:

  • fastcgi_pass 必须和 php-fpm 的 listen 一致
  • 必须 include fastcgi-php.conf

重载 Nginx:

nginx -t
systemctl reload nginx

四、Apache 未启用 php-fpm(proxy_fcgi)

1. 启用模块

a2enmod proxy_fcgi setenvif

2. 启用 php-fpm 配置

a2enconf php8.1-fpm

3. 重启

systemctl restart apache2

五、php-fpm listen 配置错误(502 主因)

查看:

cat /etc/php/8.1/fpm/pool.d/www.conf | grep listen

常见值:

listen = /run/php/php8.1-fpm.sock

Web 服务器必须对应:

  • Nginx:fastcgi_pass unix:/run/php/php8.1-fpm.sock;
  • Apache:自动匹配

六、文件权限问题(常忽略)

php-fpm 用户

ps aux | grep php-fpm

一般是 www-data

设置权限

chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html

七、PHP 文件本身问题

测试文件:

echo "<?php phpinfo(); ?>" > /var/www/html/info.php

访问:

http://服务器IP/info.php
  • 能看到 PHP 信息 → 配置正常
  • 下载 / 源码 → Web 未解析

八、常见错误示例

❌ 错误(会下载 PHP)

location / {
    root /var/www/html;
}

✅ 正确

location ~ \.php$ {
    fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}

九、快速自检清单 ✅

  • [ ] php-fpm 已安装并运行
  • [ ] Web 服务配置了 PHP 解析
  • [ ] fastcgi_pass 路径正确
  • [ ] 文件权限正确
  • [ ] 重载了 Web 服务

如果你愿意,可以贴出:

  • Ubuntu 版本
  • Nginx / Apache
  • php 版本
  • 报错信息或 nginx/apache 配置

我可以直接帮你定位是哪一步错了。

0