日志是排查PHP-FPM问题的核心线索,Ubuntu中日志路径通常由配置文件指定。首先通过以下命令定位配置文件中的日志路径:
php --ini | grep "Loaded Configuration File" # 找到PHP-FPM主配置文件路径(如/etc/php/8.2/fpm/php-fpm.conf)
然后打开配置文件,查找error_log和access_log指令(默认可能位于/var/log/php-fpm/error.log或/var/log/php8.2-fpm.log)。使用以下命令实时查看错误日志:
sudo tail -f /var/log/php-fpm/error.log # 替换为实际日志路径
日志中会明确提示错误类型(如配置语法错误、端口冲突、权限不足等)。
通过systemctl命令确认PHP-FPM是否正在运行:
sudo systemctl status php8.2-fpm # 替换为你的PHP版本(如php7.4-fpm)
sudo systemctl start php8.2-fpm启动;配置文件错误(如拼写错误、缺失指令)会导致PHP-FPM无法启动。使用以下命令测试配置文件语法:
sudo php-fpm -t # 测试主配置文件(/etc/php/8.2/fpm/php-fpm.conf)语法
sudo php-fpm -t -c /etc/php/8.2/fpm/pool.d/www.conf # 测试pool配置文件语法
若输出Configuration file is valid则表示语法正确,否则会根据错误提示定位问题(如listen指令格式错误)。
若PHP-FPM配置为监听端口(默认9000),需确认端口未被其他进程占用;若使用Unix套接字(如/var/run/php/php8.2-fpm.sock),需确认套接字文件存在且权限正确。
sudo netstat -tuln | grep 9000 # 替换为你的监听端口
若端口被占用,修改PHP-FPM配置文件中的listen指令(如改为listen = 9001),或停止占用进程(sudo kill -9 <PID>)。ls -l /var/run/php/php8.2-fpm.sock # 替换为你的套接字路径
若文件不存在,可能是配置错误或权限问题;若存在但权限不足,需修改权限(sudo chown www-data:www-data /var/run/php/php8.2-fpm.sock)。PHP-FPM需以正确的用户(如www-data)和组运行,否则无法访问网站文件或日志。检查配置文件中的user和group指令:
sudo nano /etc/php/8.2/fpm/pool.d/www.conf # 打开pool配置文件
确保以下两行设置为Web服务器用户(通常为www-data):
user = www-data
group = www-data
修改后重启PHP-FPM:sudo systemctl restart php8.2-fpm。同时,确保网站根目录(如/var/www/html)的权限允许PHP-FPM用户访问:
sudo chown -R www-data:www-data /var/www/html
若Web服务器未正确转发请求到PHP-FPM,会导致PHP页面无法解析。
fastcgi_pass指令指向PHP-FPM的监听地址(端口或套接字),例如:location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; # 或 fastcgi_pass 127.0.0.1:9000;
}
ProxyPassMatch指令指向PHP-FPM,例如:<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php/php8.2-fpm.sock|fcgi://localhost"
</FilesMatch>
修改后重启Web服务器:sudo systemctl restart nginx(或apache2)。
若服务器资源不足(如内存耗尽、磁盘空间满),会导致PHP-FPM进程崩溃。使用以下命令检查资源使用情况:
free -m # 查看内存使用(重点关注“可用”内存)
df -h # 查看磁盘空间(重点关注“可用”空间)
若内存不足,可调整PHP-FPM的pm.max_children指令(减少子进程数,避免内存耗尽);若磁盘空间满,清理日志文件或无用数据。
若需更详细的运行状态信息,可启用PHP-FPM的状态页面。编辑pool配置文件:
sudo nano /etc/php/8.2/fpm/pool.d/www.conf
取消以下注释并设置路径:
pm.status_path = /status
重启PHP-FPM后,在Nginx中添加location规则(需允许特定IP访问):
location /status {
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
allow 127.0.0.1;
deny all;
}
通过curl http://127.0.0.1/status查看状态信息(包含活跃进程数、请求队列等)。
通过以上步骤,可逐步定位并解决Ubuntu上PHP-FPM的常见错误。若问题仍未解决,建议根据日志中的具体错误信息进一步搜索解决方案(如“PHP-FPM listen指令错误”“Permission denied”等)。