首先确认PHP-FPM是否正在运行,使用以下命令查看服务状态:
sudo systemctl status php7.x-fpm # 将x替换为实际PHP版本(如7.4、8.1)
若服务未运行,启动它:
sudo systemctl start php7.x-fpm
若需开机自动启动,执行:
sudo systemctl enable php7.x-fpm
PHP-FPM的错误日志是排查问题的关键,常见路径为:
/var/log/php-fpm.log # 通用日志路径
/var/log/php7.x-fpm.log # 版本-specific日志(如php7.4-fpm.log)
使用以下命令实时查看最新日志:
sudo tail -f /var/log/php7.x-fpm.log
根据日志中的错误信息(如配置语法错误、端口冲突、权限问题)针对性解决。
PHP-FPM的主配置文件及池配置文件需检查语法是否正确:
/etc/php/7.x/fpm/php-fpm.conf/etc/php/7.x/fpm/pool.d/www.conf使用以下命令测试配置文件语法:
sudo php-fpm -t
若输出Configuration test passed,说明配置正确;若有错误,根据提示修改对应文件。
重点核查以下参数是否正确:
listen指令:确保PHP-FPM监听的地址/端口有效(如Unix套接字/run/php/php7.x-fpm.sock或TCP端口127.0.0.1:9000)。user/group指令:通常设置为www-data(与Web服务器用户一致),避免权限问题。pm指令:如pm = dynamic(动态进程管理)或pm = static(静态进程管理),根据服务器负载选择。若PHP-FPM配置为监听TCP端口(如9000),需检查端口是否被占用:
sudo netstat -tuln | grep :9000
若端口被占用,修改listen指令为其他端口或停止占用进程:
sudo kill -9 <PID> # 替换<PID>为占用端口的进程ID
若使用Unix套接字(如/run/php/php7.x-fpm.sock),检查套接字文件是否存在及权限:
ls -l /run/php/php7.x-fpm.sock
确保PHP-FPM进程有权访问以下路径:
/var/www/html,需将所有者设为www-data:sudo chown -R www-data:www-data /var/www/html
www-data用户有读写权限:sudo chmod -R 755 /var/log/php7.x-fpm.log # 日志目录
sudo chmod 755 /run/php/php7.x-fpm.sock # 套接字文件(若存在)
若配置文件损坏或安装不完整,可重新安装PHP-FPM:
sudo apt update
sudo apt install --reinstall php7.x-fpm # 替换为实际版本
安装完成后,重启服务:
sudo systemctl restart php7.x-fpm
若使用Nginx,确保fastcgi_pass指向正确的PHP-FPM地址(与listen指令一致):
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.x-fpm.sock; # 或127.0.0.1:9000
}
若使用Apache,确保ProxyPassMatch指向正确的PHP-FPM地址:
<LocationMatch "\.php$">
SetHandler "proxy:fcgi://unix:/run/php/php7.x-fpm.sock"
</LocationMatch>
修改后重启Web服务器:
sudo systemctl restart nginx # 或apache2
通过以上步骤,可解决Ubuntu上大部分PHP-FPM问题。若问题仍未解决,请提供具体错误日志信息以便进一步排查。