API接口POST上传文件时Nginx返回502 Bad Gateway错误排查求助
问题根因与解决方案
你遇到的502错误核心原因是PHP-FPM进程处理请求时触发段错误(SIGSEGV)直接崩溃,你之前调整的Nginx超时、缓冲区配置都不对症,按以下步骤排查即可解决:
- 优先修正cURL请求头错误
你上传文件的请求手动设置了Content-Type: application/json,但带文件的POST请求必须使用multipart/form-data格式的请求头,错误的头配置导致PHP解析POST数据时逻辑异常,直接触发进程崩溃。
把请求头里的Content-Type: application/json这一行删除,cURL会自动根据你传入的POST参数(含文件)生成正确的请求头,改完先测试是否恢复正常。 - 检查PHP上传配置限制
编辑/etc/php/7.2/fpm/php.ini,确认以下参数值大于你上传的文件大小:upload_max_filesize:单个上传文件的最大大小post_max_size:整个POST请求的最大大小,需大于upload_max_filesize
修改完成后执行systemctl restart php7.2-fpm重启服务生效。
- 排查上传相关扩展兼容性
PHP7.2属于停止维护的老版本,如果你上传文件后需要调用fileinfo获取文件类型、或者用gd/imagick处理图片,可能存在扩展版本兼容性bug导致段错误:- 先执行
php -m | grep fileinfo确认是否安装fileinfo扩展,临时将/etc/php/7.2/fpm/conf.d/20-fileinfo.ini重命名为非ini后缀,重启php-fpm测试是否恢复 - 如果涉及图片处理,尝试降级或升级gd/imagick扩展版本到适配PHP7.2的稳定版
- 先执行
- 调整PHP-FPM进程池配置
你当前的进程池配置上限太低,大文件上传时进程资源占用高,很容易出现进程不足崩溃的情况,编辑/etc/php/7.2/fpm/pool.d/www.conf修改以下参数:
重启php-fpm生效。pm.max_children = 20 pm.start_servers = 5 pm.min_spare_servers = 2 pm.max_spare_servers = 8
内容的提问来源于stack exchange,提问作者Maqsud
相关产品推荐
相关产品推荐

