在 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 -v
php-fpm -v
systemctl status php8.1-fpm
# 或
systemctl status php-fpm
未运行则:
systemctl start php8.1-fpm
systemctl enable php8.1-fpm
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
a2enmod proxy_fcgi setenvif
a2enconf php8.1-fpm
systemctl restart apache2
查看:
cat /etc/php/8.1/fpm/pool.d/www.conf | grep listen
常见值:
listen = /run/php/php8.1-fpm.sock
Web 服务器必须对应:
fastcgi_pass unix:/run/php/php8.1-fpm.sock;ps aux | grep php-fpm
一般是 www-data
chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html
测试文件:
echo "<?php phpinfo(); ?>" > /var/www/html/info.php
访问:
http://服务器IP/info.php
❌ 错误(会下载 PHP)
location / {
root /var/www/html;
}
✅ 正确
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
如果你愿意,可以贴出:
我可以直接帮你定位是哪一步错了。