nginx出現502有很多缘故,但绝大多数缘故能够归纳为資源总数不足用,换句话说后端开发php-fpm解决有什么问题,nginx将恰当的手机客户端请求发送给了后端php-fpm进程,可是由于php-fpm进程的难题造成 不可以恰当分析php编码,最后回到给了手机客户端502不正确。
网络服务器出現502的缘故是网络连接超时大家向服务器发送请求因为网络服务器当今连接过多,造成 网络服务器层面没法给于一切正常的回应,造成该类出错。因而假如你网络服务器并发量十分大,那只有先提升设备,随后按下列方法提升会获得更强实际效果;但假如你高并发并不大却出現502,一般都能够归纳为配备难题,脚本制作请求超时难题。
1. php.ini的memory_limit过小
(如果有某些php程序流程进程必须占有巨大运行内存时这一务必留意)
2. php-fpm.conf 中max_children或是max_requests设置不科学
(设置过小会由于沒有充足的cgi进程解决请求,设置过交流会出現一会儿有回应一切正常,一会儿等好长时间才有回应的状况,一般状况下children按 照运行内存测算,例如2GB设置64,2G 128。这一依据具体情况自主调节。此外查询当今的PHP FastCGI进程数是不是足够的指令为:
netstat -anpo |grep php-cgi | wc -l 假如具体应用的“FastCGI进程数;贴近预置的;FastCGI进程数,那麼,表明;FastCGI进程数;不足用,必须扩大。)
3. 查询nginx不正确日志
发觉 pstream sent too big header while reading response headerfrom upstream,则查验client head buffer,fastcgi buffer size是不是过小,可设置为32K。
4. php程序运行時间太长而请求超时,查验nginx和fastcgi中各种各样timeout设置。
nginx:
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout300;
keepalive_timeout;
php-fpm:
request_terminate_timeout=300;
php.ini:
max_execution_time=300;
但是request_terminate_timeout主要参数会立即干掉php进程,随后重新启动php进程,那样前端开发nginx便会回到104: Connection reset by peer,最好是设成request_terminate_timeout=0;但最重要的是程序流程里要设置好请求超时,不必应用php-fpm的request_terminate_timeout。
5.php-fpm主要参数max_requests
该主要参数指出了每一个children数最多解决多少个请求后便会被关掉。在很多解决请求下,假如该值设置过小会造成 children经常的自尽和创建而消耗 很多時间,若全部的children类似都会这个时候自尽,则复建前将沒有children回应请求,因此502。能够将该值设置大一些或是是0[无尽]。
6.调高姿态高linux核心打开文件总数
能够应用这种指令(务必是root账号)
echo 'ulimit -HSn 65536'>> /etc/profile
echo 'ulimit -HSn 65536'>> /etc/rc.local
source /etc/profile
7.缓存文件设置较为小
改动或提升配备到nginx.conf
proxy_buffer_size 64k;
proxy_buffers 512k;
proxy_busy_buffers_size 129k;
8、自身碰到502的解决方案:
调节扩大php和Nginx的backlog数,且nginx和php的backlog数同样。如:backlog=1000000
之上类似是较为普遍的502的难题缘故及其解决方案,实际上解决困难的最好是的方法還是去看nginx和fastcgi的errorlog。
最终使用在网上的万花油叫法做一个汇总: php-cgi进程数不足用、php实行时间长、或是是php-cgi进程死了,都是会出現502不正确。
热搜词