我们经常会发现大量的nginx服务器访问时会提示nginx
Gateway Time
out错误了
下面我来总结了一些解决办法
有需要了解的同学可进入参考
一般看来 这种情况可能是由于nginx默认的fastcgi进程响应的缓沖区太小造成的 这将导致fastcgi进程被挂起 如果你的fastcgi服务对这个挂起处理的不好 那么最后就极有可能导致 Gateway Timeout
现在的网站 尤其某些论坛有大量的回复和很多内容的 一个页面甚至有几百K
默认的fastcgi进程响应的缓沖区是K 我们可以设置大点
在nginxconf里 加入:
fastcgi_buffers k
这表示设置fastcgi缓沖区为×k
当然如果您在进行某一项即时的操作 可能需要nginx的超时参数调大点 例如设置成秒:
send_timeout ;
我只是调整了这两个参数 结果就是没有再显示那个超时 可以说效果不错
另一篇文章
首先是更改phpfpm的几处配置
把max_children由之前的改为现在的这样就可以保证 有充足的phpcgi进程可以被使用
把request_terminate_timeout由之前的s改为s这样phpcgi进程 处理脚本的超时时间就是秒可以防止进程都被挂起提高利用效率
接着再更改nginx的几个配置项减少FastCGI的请求次 数尽量维持buffers不变
fastcgi_buffers由 k 改为 k
fastcgi_buffer_size 由 k 改为 K
fastcgi_busy_buffers_size 由 K 改为 K
fastcgi_temp_file_write_size 由 K 改为 K
好了重新加载phpfpm和nginx的配置再次测试至今两周时间内没有再出现 Gateway Timeout的情况算是达到效果了
另外phpfpm的默认静态处理方式会使得phpcgi的进程长期占用内存而无法释放这也是导致nginx出错的原因之一因此可以将phpfpm的处理方式改成apache模式
apachelike