php nginx超时出错

执行PHP操做大文件insert mysql数据库时,出现这个错误提示php

The page you are looking for is temporarily unavailable.
Please try again later.mysql

 

set_time_limit(0)不限超时已经设置,而且PHP.INI中的错误提示已经打开,但仍是出现上面的提示。nginx

因而,查看nginx的错误日志,发现这个错误web

2014/02/11 15:51:09 [error] 6085#0: *403 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.0.34, server: admin38.xx.com, request: "GET /osstest/fread.php?id=98 HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "admin38.xx.com:1010"sql

好象是超时了。。数据库

因而 修改nginx的配置文件conf后端

 

报这个错误以后,整个服务器就不响应了,可是nginx后面的webpy程序没有任何错误,后端的数据库也很正常,从网上查了不少资料,都是说要修改proxy_read_timeout,proxy_send_timeout和proxy_buffer几个相关设置的值。服务器

以下配置,要放在server配置节以内php-fpm

large_client_header_buffers 4 16k; client_max_body_size 30m; client_body_buffer_size 128k; #proxy_connect_timeout 300; #proxy_read_timeout 300; #proxy_send_timeout 300; #proxy_buffer_size 64k; #proxy_buffers 4 32k; #proxy_busy_buffers_size 64k; #proxy_temp_file_write_size 64k; fastcgi_connect_timeout 300; fastcgi_read_timeout 300; fastcgi_send_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 32k; fastcgi_busy_buffers_size 64k; fastcgi_temp_file_write_size 64k;

你能够看到上面是proxy_和fastcgi_两种配置,就是说若是你的nginx后面是proxy,就设置proxy相关的配置,若是是fastcgi就设置fastcgi相关的配置。post

这里能够设置最大,如100000,

 

这里规定了PHP-CGI的链接、发送和读取的时间,300秒足够用了,所以个人服务器不多出现504 Gateway Time-out这个错误。最关键的是php-fpm.conf的设置,这个会直接致使502 Bad Gateway和504 Gateway Time-out。
  下面咱们来仔细分析一下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 Bad gateway这个错误。
  而”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 Gateway Time-out这个错误,而正在处理的很累的那几个php-cgi若是遇到了问题就会出现502 Bad gateway这个错误。
fastcgi_read_timeout 300s;

为防止万一,我在nginx.conf默认配置文件中也修改了最大时间。

 

[plain]  view plain  copy
 
  1.  fastcgi_connect_timeout 100000;  
  2.  fastcgi_send_timeout 100000;  
  3.  fastcgi_read_timeout 100000;  
  4.  fastcgi_buffer_size 64k;  
  5.  fastcgi_buffers 8 64k;  
  6.  fastcgi_busy_buffers_size 64k;  
  7. #fastcgi_temp_file_write_size 64k;  


 

作了上面2个设置后,重启一下

 

/usr/local/nginx/sbin/nginx -s stop   //关闭服务器
/usr/local/nginx/sbin/nginx  开启服务器

 

php-fpm重启

killall php-fpm 
再执行(usr/local/php是php的安装目录)
/usr/local/php/sbin/php-fpm


 

 

 

 

NGINX反代理超时报错,解决方法:server {        listen       80;        server_name  *.xywy.com ;        large_client_header_buffers 4 16k;        client_max_body_size 300m;        client_body_buffer_size 128k;        proxy_connect_timeout 600;        proxy_read_timeout 600;        proxy_send_timeout 600;        proxy_buffer_size 64k;        proxy_buffers   4 32k;        proxy_busy_buffers_size 64k;         proxy_temp_file_write_size 64k;         ........................ }

相关文章
相关标签/搜索