日期:2020.12.15
出现情况:前端调用后台的获取小程序版本库
接口,请求无法回来。
这个接口中,调用微信的 获取代码模板列表
接口,返回最后一个版本号信息给前端。
环境:
服务器: Nginx/1.18…0
框架: yii2
微信SDK使用的是EasyWechat
解决路线
Step1:检查是否PHP代码错误
在return之前打印retune数据到Log数据库,发现数据正常。排除了业务代码的错误可能。
Step2:postman测试
用postman测试,出现502错误
Step3:尝试处理502
- 在网络上找了很多502的报错解决办法,一说是浏览器缓存,强制刷新了,没用。而且都是postman请求了,应该不存在缓存的情况。也试过用别的浏览器。依然失败。
- 改php-fpm.conf,依然没用。
- 打印服务器的错误,Nginx错误显示:
upstream sent too big header while reading response header from upstream
,返回头过长。发现返回头不知道为什么把微信接口返回的数据带上了。 - 继续调试,确定了就是调用
EsayWechat
的接口后,数据无法正常返回给前端。
怀疑是EsayWechat
把debug信息返回了,不能确定。
已经试过各种办法,无果后,尝试给EsayWechat
指定Log。
官方文档:
/**
* 日志配置
*
* level: 日志级别, 可选为:
* debug/info/notice/warning/error/critical/alert/emergency
* path:日志文件位置(绝对路径!!!),要求可写权限
*/
'log' => [
'default' => 'dev', // 默认使用的 channel,生产环境可以改为下面的 prod
'channels' => [
// 测试环境
'dev' => [
'driver' => 'single',
'path' => '/tmp/easywechat.log',
'level' => 'debug',
],
// 生产环境
'prod' => [
'driver' => 'daily',
'path' => '/tmp/easywechat.log',
'level' => 'info',
],
],
],
修改过后,接口正常返回了。成功!
总结
502错误是什么
bad geteway,错误的网关。
根本原因是:代理错误
本项目使用的是CGI代理,那么出现的原因也就是网关(fpm)和服务器(nginx)不能正常通信。
注:fpm 是一种 CGI
查错路线
- 检查fpm错误日志
- 检查nginx错误日志
- 找到对应的错误信息,再针对性解决
更新
- 2020.12.16 给EasyWechat团队提交issue,建议去掉默认输出debug日志,已经被官方团队处理。
EasyWechat issues #1993