nginx的几个错误解决方法

今年春节,注定是这么多年最让我难忘的一个!因为我半夜还在维护服务器!公司有一定的基础用户量,春节期间用户量暴增,导致服务器鸭梨山大报警了!没办法,这些都是应该经历的。下面就总结一下nginx的一些问题,希望以后不要再犯同样的错误。

  • 499错误

官方解释:

ngx_string(ngx_http_error_495_page), /* 495, https certificate error*/
ngx_string(ngx_http_error_496_page), /* 496, https no certificate */
ngx_string(ngx_http_error_497_page), /* 497, http to https */
ngx_string(ngx_http_error_404_page), /* 498, canceled */
ngx_null_string,                    /* 499, client has closed connection */

499,客户端关闭连接,这个状态码并不是http协议中定义的status code,而是nginx自己定义的一个状态码。由于服务器处理请求较多,客户端在有效时间内没有得到答复,主动关闭了连接。有人说把时间设置长一些或者使用proxy_ignore_client_abort on(让代理服务端不要主动关闭客户端的连接)。但是这样也有一定的风险,会拖垮服务器。发生这个错误,如果服务器CPU和内存不算太高,一般是数据库和程序的问题,数据库处理较慢或者程序线程较低。结合情况调整,比如读写分离或者程序线程数调高。

  • recv() failed (104: Connection reset by peer) while reading response header from upstream

程序执行太久而被终止,在代理处添加fail_timeout和max_fails,加在代理服务的后面。这2个参数一起配合,来控制nginx怎样认为upstream中的某个server是失效的。当在fail_timeout的时间内,某个server连接失败了max_fails次,则nginx会认为该server不工作了。同时,在接下来的 fail_timeout时间内,nginx不再将请求分发给失效的server。如果不设置这2个参数,fail_timeout默认为10s,max_fails默认为1。就是说,只要某个server失效一次,则在接下来的10s内,就不会分发请求到该server上。为了避免因为意外原因导致的错误判断,所以要根据实际并发情况填写合理的值。max_fails=0则表示不做判断,即使有多次失败请求,后面的请求也会继续发给它处理。

  • accept() failed (24: Too many open files)

打开文件数太多,受到限制。ulimit -n,查看linux可打开文件总数。解决这个问题,把worker_rlimit_nofile和worker_connections设置高一些就好了。worker_rlimit_nofile 更改worker进程的最大打开文件数限制,worker_connections 设置可由一个worker进程同时打开的最大连接数。最大客户数也由系统的可用socket连接数限制(~ 64K),所以设置不切实际的高没什么好处。注意worker_connections不要超过worker_rlimit_nofile。

http://www.lc365.net/blog/b/23997/
http://www.cnblogs.com/discuss/articles/1866851.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值