首先要明确502的错误是怎么出现的,我们先看看nginx+php-fpm的请求流程图,如下:
如上图所示,nginx将浏览器的请求转发给后端的php-fpm进程进行处理,后端的php-fpm进程数量和请求处理次数可以在php-fpm.conf中max_children或者max_requests 进行设置。
那么如果php-fpm进程执行php代码的时间过长,那么nginx将新的请求发给php-fpm的时候,由于后端的php-fpm都在忙,就会造成没人处理改请求,nginx就会抛出502错误,还有一种情况就是nginx在浏览器第一次请求的时候,会指定将该浏览器的请求指定给后端的一个php-fpm进程,如果该进程执行php代码时间过长,也会导致无法处理新请求而抛出502错误。
好了,知道原因后那怎么解决这个问题呢?
1、增加php-fpm进程数量
一般情况下php-fpm进程数量可以按照内存计算,比如说1G设置64个,2G设置128个。
还可以通过查看当前的php-fpm进程数是否够用来决定要不要增加,查看命令为:netstat -napo |grep "php-fpm" | wc -l
如果实际使用的“php-fpm进程数”接近预设的“php-fpm进程数”,那么,说明“php-fpm进程数”不够用,需要增大。
修改方法:
打开php-fpm.conf中的找到max_children项,进行设置,另外max_requests 表示一个php-fpm进程的最大处理请求数,也可以设置大一些。
2. 增加linux内核打开文件数量
可以使用这些命令(必须是root帐号)
echo 'ulimit -HSn 65536'>> /etc/profile
echo 'ulimit -HSn 65536'>> /etc/rc.local
source /etc/profile
3.缩短脚本执行时间超时时间
如果脚本因为某种原因长时间等待不返回,导致新来的请求不能得到处理,可以适当调小如下配置。
nginx.conf里面主要是如下
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
php-fpm.conf里如要是如下
request_terminate_timeout =10s
4.缓存设置
修改或增加配置到nginx.conf
proxy_buffer_size 64k;
proxy_buffers 512k;
proxy_busy_buffers_size 128k;
5.系统架构调整
建议将耗时的操作通过异步队列的方式处理,缩短php进程的执行时间。
网友回复
腾讯混元模型广场里都是混元模型的垂直小模型,如何api调用?
为啥所有的照片分辨率提升工具都会修改照片上的图案细节?
js如何在浏览器中将webm视频的声音分离为单独音频?
微信小程序如何播放第三方域名url的mp4视频?
ai多模态大模型能实时识别视频中的手语为文字吗?
如何远程调试别人的chrome浏览器获取调试信息?
为啥js打开新网页window.open设置窗口宽高无效?
浏览器中js的navigator.mediaDevices.getDisplayMedia屏幕录像无法录制SpeechSynthesisUtterance产生的说话声音?
js中mediaRecorder如何录制window.speechSynthesis声音音频并下载?
python如何直接获取抖音短视频的音频文件url?