客户端、nginx、php-fpm三者之间的关系
客户端发送请求给nginx,nginx将请求接收后,再发给php-fpm。nginx接收到php-fpm的响应后缓存到本地然后再发给客户端,或者一边缓存一边转发,这就是转发响应并以上游网速优先的模式。因为客户端和nginx之间是公网,网速慢环境差,nginx与php-fpm之间是内网,网速快且稳定。
什么是502、504
他们都表示nginx与其上游服务(这里是php-fpm)之间出了问题,502表示错误,504表示超时。下面都以php-fpm(或php,表示一个意思)为例。
502
表示php-fpm出现了错误、故障,有以下几种情况
1、tcp链接无法建立。这个时候,nginx会直接向客户端返回502错误,比如没有启动php-fpm进程、并发过高导致无可用php-fpm进程。
2、解析http协议时出现了问题。默认nginx使用一个4k的buffer缓存php-fpm的响应头(http头信息),如果php-fpm返回的响应头信息大于了4k,很明显,buffer装不下了。这时候nginx向客户端返回502。
3、php请求处理时间超时,php-fpm 子进程被master进程杀掉。(下面有说明)
504
nginx将客户端的请求完整转发给php后,会设置一个定时器,就是fastcgi_read_timeout,默认60秒,如果超过了60秒还没见PHP发回来响应的数据(包头或包体都算)&#x