Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2026507
  • 博文数量: 433
  • 博客积分: 918
  • 博客等级: 准尉
  • 技术积分: 3218
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-24 18:21
个人简介

你是不是暗恋我,那就给我发个消息呀,让我知道o(∩∩)o

文章分类

全部博文(433)

分类: 服务器与存储

2015-09-24 17:05:57

http://blog.csdn.net/webnoties/article/details/19081899

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

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


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

于是,查看nginx的错误日志,发现这个错误

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"

好象是超时了。。

于是 修改nginx的配置文件conf


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

如下配置,要放在server配置节之内
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 300s;
fastcgi_read_timeout 300s;
fastcgi_send_timeout 300s;
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相关的配置。

这里可以设置最大,如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 plaincopy在CODE上查看代码片派生到我的代码片
  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;
         ........................
 }

阅读(2725) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~