当Nginx调用PHP-FPM出现错误时,通常表现为502 Bad Gateway、404 Not Found或空白页面。以下是系统化的排查和解决方案:
# 检查服务状态
systemctl status nginx php-fpm
# 确保服务已启动
sudo systemctl restart nginx php-fpm
nginx
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.4-fpm.sock; # 或 127.0.0.1:9000
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
fastcgi_pass
路径/端口与PHP-FPM配置不一致SCRIPT_FILENAME
未正确设置(需绝对路径)/etc/php/7.4/fpm/pool.d/www.conf
):
ini
listen = /run/php/php7.4-fpm.sock # Unix Socket
; 或 listen = 9000 # TCP端口
bash
chown www-data:www-data /run/php/php7.4-fpm.sock
chmod 660 /run/php/php7.4-fpm.sock
# 确保PHP文件可读且目录可执行
chmod -R 755 /var/www/html
chown -R www-data:www-data /var/www/html
bash
tail -f /var/log/nginx/error.log
bash
tail -f /var/log/php7.4-fpm.log
bash
sudo -u www-data SCRIPT_FILENAME=/var/www/html/test.php \
REQUEST_METHOD=GET cgi-fcgi -bind -connect /run/php/php7.4-fpm.sock
bash
telnet 127.0.0.1 9000
错误现象 | 可能原因 | 解决方案 |
---|---|---|
502 Bad Gateway | PHP-FPM未运行/配置不匹配 | 检查fastcgi_pass 与PHP-FPM监听地址 |
404 Not Found | SCRIPT_FILENAME 路径错误 |
确认$document_root 指向正确目录 |
空白页 | PHP语法错误/权限问题 | 查看PHP-FPM日志,检查文件权限 |
"Primary script unknown" | 路径传递失败 | 确保Nginx和PHP-FPM用户一致(如www-data) |
php
ini_set('display_errors', 1);
error_reporting(E_ALL);
ini
; php.ini 中检查以下参数
max_execution_time = 30
memory_limit = 128M
info.php
测试基础功能)通过以上步骤,90%的Nginx+PHP-FPM集成问题均可定位解决。若问题仍存在,需结合具体日志进一步分析。