nginx502与504

502与504释义:

502 bad gateway 顾名思义 网关错误 后端服务器tomcat或php没有起来,应用服务的问题(前提是接入层7层正常的情况下)。

应用服务问题一种是应用本身问题;另一种是因为依赖服务问题比如依赖服务RT高,依赖的服务有大的读取(mysql慢查,http等),以至于调用方超过超时read时间;服务集群压力大时,也会出现502超时(502理解为不可响应或响应不过来,其实还是不可响应)。

504 gateway time-out 顾名思义 网关超时 一般计算机中的超时就是配置错了,此处一般指nginx做反向代理服务器时,所连接的服务器tomcat无响应导致的。

从网络角度,502已经与后端建立了连接,但超时;504与后端连接未建立,超时。

5打头的http回复码表示服务端出了问题,php-cgi进程数不够用、php执行时间长、或者是php-cgi进程死掉,都会出现502错误,有可能是nginx的问题,也可能是后端php的问题

排查思路:

1、必现502,应用“挂了”
2、偶现502,资源不足,mysql连不上,等等,大都是资源不足的问题

排查逻辑:

Nginx通过配置fastcgi模块来提供对php支持

Nginx的问题:

  1. 可能php的执行时间比较长,超过了nginx的等待时间,把nginx默认的等待时间调长

fastcgi_connect_timeout 300;(默认60,不能超过75)

fastcgi_send_timeout 300; (默认60)

fastcgi_read_timeout 300; (默认60)

phpfpm的问题:/usr/local/php/etc/php-fpm.conf:

1.    php有没有启动

  1. 2.      可以查看FastCGI进程数的配置与实际grep php-cgi出的进程数,相近的话,可以将FastCGI的进程数量调大

修改php配置文件中pm.max_children 默认10,改成30

  1. 3.      或者修改php配置文件中pm.max_requests的值,它表示每个CGI进程可以响应的请求数。
  2. 尝试增大php缓存区的大小,因为它默认是8k,可以改成128k

fastcgi_buffers 8 128k

补充:   如果nginx访问量突然增大的话,也会出现504的错误,因为nginx每秒回应的请求是有限制的,如果超过的话,只会对部分请求做出回复,这个可以过滤nginx日志中ip的请求数来判断是否被攻击。

原文地址:https://www.cnblogs.com/xiaoyuxixi/p/13847924.html