Nginx+php-fpm 模式下的502、504问题

本文详细解释了Nginx、php-fpm和客户端之间的交互,以及502 Bad Gateway和504 Gateway Timeout错误的原因。讨论了配置参数如fastcgi_connect_timeout、fastcgi_buffer_size和fastcgi_read_timeout的影响。同时提出了并发请求时可能出现的499 Client Closed Request问题,并探讨了PHP的相关知识点,包括set_time_limit()和php-fpm的request_terminate_timeout设置。
摘要由CSDN通过智能技术生成

客户端、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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值