中国投资网 百科 完美解决Nginx 504 Gateway time-out

完美解决Nginx 504 Gateway time-out

最近一个用dedecms搭建的网站增加了大量的内容,三个栏目包含了2000多篇文章,生成栏目列表的时候出现了两个栏目2300多篇文章。504网关超时服务器用nginx,我不太懂。服务器维护人员在网上找到一篇文章,修改了nginx的缓存设置。如果不行,他就不管了,但是我不能不管,不能生成。

我把数据库下载到本地,本地配置nginx,试了很多次,都不行。我改成了阿帕奇,更夸张。生成83页后,我无法继续。好像nginx更厉害一点。虽然出现504网关超时,但至少可以生成。

我不得不继续在网上寻找更多的解决方案。试了N次,终于找到了一个有用的方法。想着以后可能会遇到这样的问题,就把那篇文章抄下来放在这里,以备日后参考。对有同样问题的朋友也是一种帮助。

下面是引用部分。我自己不懂技术,但在我的dedecms5.6里有用,其他人可以自己试试。

NGX502BAD Gateway表示请求的php-CGI已经执行,但是由于某种原因(通常是读取资源的问题),PHP-CGI的进程已经终止。

NGX504网关超时的意思是被请求的网关没有请求,简单来说就是没有请求可执行的PHP-CGI。

要解决这两个问题,需要综合考虑。一般来说,Nginx 502坏网关和php-fpm.conf的设置有关,Nginx 504网关超时和nginx.conf的设置有关

但正确的设置需要考虑服务器本身的性能、访客数量等多重因素。

以我现在的服务器为例。CPU是centos系统,1.5G CPU,1GB内存。大约50名游客同时在线。

但是大多数上网的人需要请求PHP-CGI进行大量的信息处理,所以我把nginx.conf设置为:

fastcgi _ connect _ timeout 300s

fastcgi _ send _ timeout 300s

fastcgi _ read _ timeout 300s

fastcgi _ buffer _ size 128k

fastcgi _ buffers 8 128k#8 128

fastcgi _ busy _ buffers _ size 256k

fastcgi _ temp _ file _ write _ size 256k;

fastcgi _ intercept _ errors on

这里最重要的设置是前三个,即

fastcgi _ connect _ timeout 300s

fastcgi _ send _ timeout 300s

fastcgi _ read _ timeout 300s

这里规定了PHP-CGI连接、发送、读取的时间,300秒足够了。因此,504网关超时错误很少出现在我的服务器上。最重要的是php-fpm.conf的设置,会直接导致502坏网关和504网关超时。

我们来仔细分析一下php-fpm.conf的几个重要参数:

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:

完美解决Nginx,504,Gateway,time-out

中国投资网后续将为您提供丰富、全面的关于完美解决Nginx,504,Gateway,time-out内容,让您第一时间了解到关于完美解决Nginx,504,Gateway,time-out的热门信息。小编将持续从百度新闻、搜狗百科、微博热搜、知乎热门问答以及部分合作站点渠道收集和补充完善信息。