Nginx常见错误:504 Gateway time-out错误完美解决方案

查看付费资源请通过右侧购买区域进行购买!

  在安装完Nginx+PHP-fpm+Mysql后,跑PHP的应用会经常出现504 Gateway Time-out 或者502 Bad Gateway的情况。

  Nginx 504 Gateway Time-out 的含义是所请求的网关没有请求到,简单来说就是没有请求到可以执行的 PHP-CGI。这种情况可能是由于 nginx 默认的 fastcgi 进程响应的缓冲区太小造成的, 这将导致 fastcgi 进程被挂起, 如果你的 fastcgi 服务对这个挂起处理的不好, 那么最后就极有可能导致 504 Gateway Time-out。

  

Nginx常见错误:504 Gateway time-out错误完美解决方案 Nginx常见错误 完美解决方案 第1张


  一般看来, 这种情况可能是由于nginx默认的fastcgi进程响应的缓冲区太小造成的, 这将导致fastcgi进程被挂起, 如果你的fastcgi服务对这个挂起处理的不好, 那么最后就极有可能导致504 Gateway Time-out

  现在的网站, 尤其某些论坛有大量的回复和很多内容的, 一个页面甚至有几百K

  默认的fastcgi进程响应的缓冲区是8K, 我们可以设置大点

  在nginx.conf里, 加入:

  fastcgi_buffers 8 128k

  这表示设置fastcgi缓冲区为8×128k

  当然如果您在进行某一项即时的操作, 可能需要nginx的超时参数调大点, 例如设置成60秒:

  send_timeout 60;

  我只是调整了这两个参数, 结果就是没有再显示那个超时, 可以说效果不错

  这个问题耽误了我差不多4个小时的时间,网上有很多前辈们的解决方法,在这里记录下解决这个问题的思路。首先这个问题主要是因为PHP的Script执行时间太长了,已经超过nginx能接受的底线。

  在nginx的日志中会看到这样的log

  2012/08/11 13:39:45 [error] 30788#0: *1 upstream timed out (110: Connection timed out)

  while reading response header from upstream, client: 127.0.0.1, server: www.cr173.com

  request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.cr173.com

  在php-fpm的日志中会发现这样的log

  2012/08/11 13:39:45 [error] 30788#0: *1 upstream timed out (110: Connection timed out)

  while reading response header from upstream, client: 127.0.0.1, server: www.cr173.com

  request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.cr173.com"

  一般来说,出现这样的情况是因为Nginx会从php-fpm的9000端口读取fastcgi的执行结果,等来N久都不见回复,所以就报504了。解决办法很简单,修改php的最长执行时间

  ; Maximum execution time of each script, in seconds; http://php.net/max-execution-time;

  Note: This directive is hardcoded to 0 for the CLI SAPI;

  fix by Matt 2012.8.11

  ;max_execution_time = 3000

  在这里我注释掉php.ini参数的时间限制。还有php-fpm里的

  ;request_terminate_timeout = 0

  这个参数会在php.ini中max_execution_time因为某些原因不能正常工作才会生效。

  之前设置的是300s,安装Magento的时候就一直就报504。后来索性修改到3000了。在Nginx的配置文件添加

  #add by Matt 2012.8.11

  fastcgi_read_timeout 3000;

  fastcgi_connect_timeout 3000;

  fastcgi_send_timeout 3000;

  Magento你到底安装多少sql文件啊?

  PS:有时候缓存过小也会引起504,具体情况还需要根据Nginx的日志内容来分析。修改fastcgi的缓存大小:

  fastcgi_buffers 2 256k;

  fastcgi_buffer_size 128k;

  fastcgi_busy_buffers_size 256k;

  fastcgi_temp_file_write_size 256k;

  VPS出现Nginx 504 Gateway time-out错误

  西西 只对 Nginx.conf 和 php-fpm.conf 两个配置文件做了一些修改,观察一段时间,看看效果。

  1.将 Nginx.conf 配置文件中相应参数设置为如下:

  命令:vi /usr/local/nginx/conf/nginx.conf (lnmp.org出品的lnmp一键安装包路径,其它请自行找目录)

  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;

  2.将 php-fpm.conf 配置文件中相应参数设置为如下值:

  命令:vi /usr/local/php/etc/php-fpm.conf (lnmp.org出品的lnmp一键安装包路径,其它请自行找目录)

  9(西西 购买的vps内存较小所以不能设置太大,应根据你的内存来设置)

  600s(根据具体情况设置,详请查阅参考文章)

  apache-like(php-fpm的默认静态处理方式会使得php-cgi的进程长期占用内存而无法释放,这也是导致nginx出错的原因之一,因此可以将php-fpm的处理方式改成apache模式。)

  对 Linux只好照着别人的方法来设置了,等一段时间,没什么问题了,这个方法应该就是一个很有效的方法了。

转载请说明出处内容投诉
仿站网 » Nginx常见错误:504 Gateway time-out错误完美解决方案

发表评论

您需要后才能发表评论

仿站网专注帝国cms仿站,Zblog仿站,Wordpress仿站服务,专业+效率+售后保障

关于我们 联系客服
 
QQ在线咨询
客服热线
139-3511-2134