常见的原因有以下几种:
1、php.ini 的memory_limit 过小(如果有个别php程序进程需要占用极大内存时这个必须注意);
2、php-fpm.conf 中max_children或者max_requests 设置不合理;
设置过小会因为没有足够的cgi进程处理请求,设置过大会出现一会儿有响应正常,一会儿等很久才有响应的情况。
3、查看nginx错误日志,发现 pstream sent too big header while reading response headerfrom upstream ,则检查client head buffer,fastcgi buffer size是否过小,可设置为32K;
4、php 程序执行时间过长而超时,检查nginx和fastcgi中各种timeout设置;
5、php-fpm 有一个参数 max_requests ,该参数指明了每个children最多处理多少个请求后便会被关闭;
在大量处理请求下,如果该值设置过小会导致 children频繁的自杀和建立而浪费大量时间,若所有的children差不多都在这个时候自杀,则重建前将没有children响应请求,于是出现502 。可以将该值设置大一些或者是0[无限]。