当前位置: 首页 > 知识 >正文

Nginx 504 Gateway Time-out问题的解决经历

centos下lnmp组合的配置基本都是用同一个配置文件,从来没有出现过问题。最近在一个vps上安装了同样的环境后,网站在10多人在线后打开速度非常慢。

有几次直接达到了nginx中设置的最大超时300秒。结果nginx向客户端浏览器发送了504网关超时错误代码,分析后更改了几个配置文件。

最后避免了这种情况。

从错误代码来看,基本可以确定与nginx本身无关,主要是提交给php-fpm的请求未能给出正确的反馈。一般情况下,提交动态请求时,nginx会直接将请求传递给php-fpm。

Php-fpm重新分配php-cgi进程来处理相关的请求,然后依次返回它们。最后nginx把结果反馈给客户端浏览器,但是我的vps目前运行的是纯php的应用内容。其实所有用户的请求都是PHP请求。

有的耗时较长,php-cgi进程总是满的,而php- fpm本身的配置文件只打开10组php-cgi进程,这样如果在线用户多一点,请求就不能正常处理,就会出错。

大概分析了原病因,就比较容易做到以下几点了。首先,改变php-fpm的几个配置:

将max_children从之前的10改为现在的30,这样可以保证足够的php-cgi进程可以使用;

将request_terminate_timeout由0s改为60s,这样php-cgi进程处理脚本的超时为60s,可以防止所有进程被挂起,提高利用效率。

然后改变nginx的几个配置项,减少FastCGI的请求数量,尽量保持缓冲区不变:

fastcgi_buffers由4 64k改为2 256k

fastcgi_buffer_size由64k改为128K

fastcgi_busy_buffers_size由128K改为256K

Fastcgi _ temporary _ file _ write _ size changed from 128K to 256K.

好了,重新加载php-fpm和nginx的配置,再测试一遍。到现在两周没有504网关超时,这是一个效果。

另外,php-fpm默认的静态处理模式会使php-cgi的进程长时间占用内存而无法释放,这也是nginx出错的原因之一,所以可以将php-fpm的处理模式改为apache模式。

value name="style "类似阿帕奇/价值

从变更完成到现在的测试表明,上述方法的效果还是比较明显的,没有发现Nginx502坏网关或者504网关超时错误。当然,

如果你的VPS或者服务器的性能足够好,就不必根据具体情况做不必要的改动。

相关文章:
  • 6月21日基金净值:建信臻选混合最新净值0.8351,跌1.67%
  • 4月10日基金净值:富国丰利增强债券最新净值1.2034,跌0.07%_基金频道_证券之星
  • 6月26日基金净值:大成蓝筹稳健混合最新净值0.8053,跌0.85%
  • 万家沪深300成长ETF净值上涨1.00% 请保持关注_基金频道_证券之星
  • 收益率6.85%,上半年公募基金打新浮盈近18亿元!这只基金打新收益超过260%
  • 万亿市场迎牛市!超九成债基净值创新高,还会继续涨吗?看机构最新解读
  • 4月19日基金净值:广发科技创新混合A最新净值1.5125,跌0.6%
  • 7月3日基金净值:汇添富盈鑫混合A最新净值1.927,跌0.31%
  • 6月26日基金净值:广发医药健康混合A最新净值0.5109,跌1.14%
  • 博时金融科技ETF净值下跌1.06% 请保持关注