app教程网 学习教程 nginx502报错排查流程(nginx报502如何解决)

nginx502报错排查流程(nginx报502如何解决)

504网关超时问题在使用nginx作为web服务器的服务器的网站中很常见。

我在升级discuz论坛的时候遇到了这个问题。

一般来说,这种情况可能是由于nginx默认的fastcgi进程响应缓冲区太小,会导致fastcgi进程被挂起。如果你的fastcgi服务没有处理好这个暂停,很有可能会导致504网关超时当前网站,尤其是一些回复量大,内容多的论坛。一个页面甚至有几百k,fastcgi进程响应的默认缓冲区是8K。我们可以在nginx.conf中将其设置得更大,并添加:

fastcgi_buffers 8 128k

这意味着将fastcgi缓冲区设置为8128k。当然,如果您正在进行即时操作,您可能需要增加nginx的超时参数,例如,增加到60秒:

send_timeout 60;

我只是调整了这两个参数,结果是超时不显示。可以说效果不错,但也可能是因为其他原因。目前关于nginx的资料并不多,很多东西需要长期的体验才能得到结果。期待你的发现!

Nginx 502 Bad Gateway是指请求的PHP-CGI已经执行,但是由于某种原因(通常是读取资源的问题)导致PHP-CGI进程终止。

Nginx 504网关超时表示请求的网关没有被请求,简单来说就是可执行的PHP-CGI没有被请求。

因此我将nginx.conf设置为:fastcgi _ connect _ time out 300 sfastcgi _ send _ time out 300 sfastcgi _ read _ time out 300 sfastcgi _ buffer _ size 128 kfastcgi _ buffers 8 128k # 8 128 fastcgi _ busy _ buffers _ size 256k;fastcgi _ temp _ file _ write _ size 256k;fastcgi _ intercept _ errors on这里最主要的设置是前三条,

Php-fpm.conf有两个至关重要的参数,一个是“max_children”,另一个是“request_terminate_timeout”。我的两个设置的值分别是“40”和“900”。

但这个值不是万能的,需要自己计算。计算方法如下:如果你的服务器性能足够好,宽带资源充足,

如果PHP脚本中没有循环或者BUG,可以直接将“request_terminate_timeout”设置为0s。0s的意思是保持PHP-CGI运行没有时间限制。如果你做不到,

也就是说你的PHP-CGI可能有BUG,或者你的宽带不够或者其他原因导致你的PHP-CGI假死,所以建议你给“request_terminate_timeout”赋值。

该值可以根据服务器的性能来设置。一般来说,性能越好,可以设置的越高,从20分钟到30分钟。因为我的服务器PHP脚本需要运行很长时间,有些可能会超过10分钟,所以我设置为900秒。

这不会导致PHP-CGI的死亡和502坏网关错误。

以及“max_children”的值是如何计算的?原则上,值越大越好。php-cgi中进程多了,处理的就快了,排队的请求就少了。

设置“max_children”也需要根据服务器的性能来设置。一般来说,一个服务器中每个php-cgi消耗的内存在20M左右,所以我把我的“max_children”设为40。

20M*40=800M,也就是说在高峰期,所有PHP-CGI消耗的内存不到800M,比我的有效内存低1Gb。如果我的“max_children”设置得较小,例如5-10,

那么php-cgi就会“很累”,处理速度慢,等待时间长。如果请求长时间未得到处理,将出现504网关超时错误。

而那些正在处理的很累的php-cgi,遇到问题就会出现502坏网关的错误。

本文来自网络,不代表本站立场,转载请注明出处:https: