插件窝 干货文章 nginx调用php-fpm出错怎么解决

nginx调用php-fpm出错怎么解决

PHP FPM 检查 Nginx 899    来源:    2025-04-25

当Nginx调用PHP-FPM出现错误时,通常表现为502 Bad Gateway、404 Not Found或空白页面。以下是系统化的排查和解决方案:


1. 基础服务检查

# 检查服务状态
systemctl status nginx php-fpm
# 确保服务已启动
sudo systemctl restart nginx php-fpm

2. Nginx配置检查

  • 关键配置项(以PHP 7.4为例): 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未正确设置(需绝对路径)

3. PHP-FPM配置验证

  • 检查监听方式/etc/php/7.4/fpm/pool.d/www.conf): ini listen = /run/php/php7.4-fpm.sock # Unix Socket ; 或 listen = 9000 # TCP端口
  • 权限问题(Socket方式): bash chown www-data:www-data /run/php/php7.4-fpm.sock chmod 660 /run/php/php7.4-fpm.sock

4. 文件权限与路径

# 确保PHP文件可读且目录可执行
chmod -R 755 /var/www/html
chown -R www-data:www-data /var/www/html

5. 日志排查

  • Nginx错误日志bash tail -f /var/log/nginx/error.log
  • PHP-FPM日志bash tail -f /var/log/php7.4-fpm.log

6. 测试PHP-FPM连通性

  • 手动测试Socketbash sudo -u www-data SCRIPT_FILENAME=/var/www/html/test.php \ REQUEST_METHOD=GET cgi-fcgi -bind -connect /run/php/php7.4-fpm.sock
  • 测试TCP连接bash telnet 127.0.0.1 9000

7. 常见错误与解决方案

错误现象 可能原因 解决方案
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)

8. 高级调试

  • 启用PHP错误显示(临时调试): php ini_set('display_errors', 1); error_reporting(E_ALL);
  • 检查PHP限制ini ; php.ini 中检查以下参数 max_execution_time = 30 memory_limit = 128M

完整排查流程

  1. 确认服务运行状态 → 2. 验证配置一致性 → 3. 检查权限 → 4. 分析日志 → 5. 隔离测试(如新建info.php测试基础功能)

通过以上步骤,90%的Nginx+PHP-FPM集成问题均可定位解决。若问题仍存在,需结合具体日志进一步分析。