坐标深圳,测试经理,干了十年测试,公号"简尚" ,博客isTester.com ,关注「软件测试从业者综合能力提升 & 职场人每日进阶」,个人微信957863300

从「简书」平台的服务器故障,谈Nginx An error occurred异常~

上一篇 / 下一篇  2016-09-27 17:06:12 / 个人分类:linux


,PH/J0A4A9t0

51Testing软件测试网-mN E(x/Lb{ P NXS

09.26简书平台的短暂异常

4O(q9e%Tt~'a0


0?HlC0W `s0

An error occurred.

4e7e0I2c"x5@T0

Sorry, the page you are looking for is currently unavailable.51Testing软件测试网5V F? `0[

Please try again later.51Testing软件测试网's#W e3TM'M

If you are the system administrator of this resource then you should check theerror log for details.

k-]$^9ToS)y0es0

Faithfully yours, nginx.51Testing软件测试网 on+q\6@ k]5[ No1H


51Testing软件测试网8tV6mzJ2\4y

老徐观点:对于一个平台级产品,服务器的生产故障,而且是直接抛出nginx的错误页面,无任何转向处理,是非常严重的事故~至于,具体原因,老徐不得而知~如下是老徐的一些猜测,正在继续老徐近期的服务器部署系列文章

Z5C;c4d~TE0

今天,刚老徐正打算上简书平台,写文章;突然,出现如上错误(本着tester从业者的严谨度,老徐再三确认不是我电脑的问题,是真的发生故障了),应该持续了几分钟~51Testing软件测试网(ZD8o$t/E+P _

不知道有多少用户有感知,好在平台响应速度还算不错,几分钟后已恢复正常~

BT$V2LM3DK0

一般nginx的此类报错,原因如下(当然,老徐对nginx了解不深,如下都是一些可能原因)51Testing软件测试网)KOEArnzW

出现问题,首先是去分析nginx的日志,得到一些线索~

4u c iDe UewF'm0


51Testing软件测试网'mF pN'}9m sq\e

可能的常见原因:51Testing软件测试网_Z|Z:j-JR B3|!L


51Testing软件测试网6^ ?4x2Gq%{N(@]

/ 1 /

^%O0y I:z%y*IV.?0

很明显这是一个nginx的错误,查看nginx.conf的文件过程中分析可能是以下的问题,在nginx.xml中有如下配置:

?IPu7i6M0

51Testing软件测试网t$l{c"U t}0Q

如上图片源自网络51Testing软件测试网-h_~4K.{zo9L


tT+[:[:Ih0O,W0

标红的部分是很大的嫌疑,恰好应用中在提交数据的一瞬间和服务器有多次交互,这些交互都要过nginx。再加上用户IP来做key,假如多个用户访问在网上的最后一跳是同一个路由器,很显然会被服务器当成是一台电脑,从而出现判断错误。那么又一个新问题来了,出现503错误后为啥返回的是那个错误页面呢?

W&kG-tXG&cHlD0

带着这个问题在nginx.conf中又发现了一段配置,如下图:51Testing软件测试网&r^ T(\ j]cK E k/\

51Testing软件测试网2M(K2A-@.T

如上图片源自网络51Testing软件测试网'nL/N$k$n:Ea.}w1o


51Testing软件测试网4c"n!~ _ ]z.Jy2_^

这个配置的意思是当出现500、502、503、504的错误时返回50x.html页面,这个页面在nginx安装目录的html文件夹下,内容如下:51Testing软件测试网'wd.o1@5k

&[,fhZT U0

如上图片源自网络51Testing软件测试网t:y*Mv'lx+?J


51Testing软件测试网8TP&R&s E{ })R)Z

这个页面经过浏览器解析就是开头第一幅图的样子。51Testing软件测试网v Be*HH^nGG

分析到这里,就大概估计出原因了,把之前的rate值该大一点即可。那么到底改多大?这个要根据不同的业务而定,甚至去掉这个配置,所以这个是个经验值,通过多次试验可以得到一个相对于应用合理的值,这里就不说了。

h\MK ~%J&Y^0

实际nginx出现这个错误原因应该有很多,这里提供一种可能原因,以供网友参考。

tz9D4]uB7}}F0x0


yt*U3{?!r%g0

/ 2 /

1I JQ'Vd0

日志记录中HTTP状态码出现499错误有多种情况,我遇到的一种情况是nginx反代到一个永远打不开的后端,就这样了,日志状态记录是499、发送字节数是0。

2Rs['L/T okr"\ HQim0

老是有用户反映网站系统时好时坏,因为线上的产品很长时间没有修改,所以前端程序的问题基本上可以排除,于是就想着是Get方式调用的接口不稳定,问了相关人员,说没有问题,为了拿到确切证据,于是我问相关人员要了nginx服务器的日志文件(awstats日志),分析后发现日志中很多错误码为499的错误,约占整个日志文件的1%,而它只占全部报错的70%左右(全部报错见下图),那么所有报错加起来就要超过1%了,这个量还是特别大的。

9c3x6vb4A0

499错误是什么?让我们看看NGINX的源码中的定义:51Testing软件测试网C#F)Cu{{pN[9j/S

ngx_string(ngx_http_error_495_page), /* 495, https certificate error */

o.XF&H#x7b0

ngx_string(ngx_http_error_496_page), /* 496, https no certificate */51Testing软件测试网8C2Q.B2LWa

ngx_string(ngx_http_error_497_page), /* 497, http to https */51Testing软件测试网L$[J(cq%k

ngx_string(ngx_http_error_404_page), /* 498, canceled */51Testing软件测试网6N8~&Tu7Ta'D#b:h+Y

ngx_null_string,                    /* 499, client has closed connection */51Testing软件测试网Z,r)D!L%[6OpM6Ot


51Testing软件测试网K)q]M M}9UZ~s

可以看到,499对应的是 “client has closed connection”。这很有可能是因为服务器端处理的时间过长,客户端“不耐烦”了。51Testing软件测试网C!B2J6}3{

Nginx 499错误的原因及解决方法

mcq O YCd O,M%WgA@0

打开Nginx的access.log发现在最后一次的提交是出现了HTTP1.1 499 0 -这样的错误,在百度搜索nginx 499错误,结果都是说客户端主动断开了连接。51Testing软件测试网1\Eu+es/_Bb

但经过我的测试这显然不是客户端的问题,因为使用端口+IP直接访问后端服务器不存在此问题,后来测试nginx发现如果两次提交post过快就会出现499的情况,看来是nginx认为是不安全的连接,主动拒绝了客户端的连接.51Testing软件测试网;EXLe[ D[6k;\ x#U+x

但搜索相关问题一直找不到解决方法,最后终于在google上搜索到一英文论坛上有关于此错误的解决方法:

5A#?f+N0_GEZ0

proxy_ignore_client_abort on;

y%?wN[(a V"}0

Don’t know if this is safe.51Testing软件测试网hp8H e1[JA.^

就是说要配置参数 proxy_ignore_client_abort on;51Testing软件测试网MI{6GQF&n|2F"Qx)P

表示代理服务端不要主要主动关闭客户端连接。51Testing软件测试网a8tA(w1s#A ~!^

以此配置重启nginx,问题果然得到解决。只是安全方面稍有欠缺,但比总是出现找不到服务器好多了。51Testing软件测试网+_'U sK4r+_Mr#o3S

还有一种原因是 我后来测试发现 确实是客户端关闭了连接,或者说连接超时 ,无论你设置多少超时时间多没用 原来是php进程不够用了 改善一下php进程数 问题解决51Testing软件测试网#ES.D_p/i;}&N



*s+E~;E Z\ ?X0


;p,@aV|9R~u R0

/ 3 /51Testing软件测试网s g#Jsf0O.B

今天网站突然出现如下错误:51Testing软件测试网)a'_eKU!J|U

The page you are looking for is temporarily unavailable.Please try again later.51Testing软件测试网g4b#i {]y

很奇怪,我对服务器端的技术不是很熟悉,于是查询了下google,在https://wiki.archlinux.org/index.php/Nginx

jv)w U'C#Y0

上面的解决方法:51Testing软件测试网VL[\_8j

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

U!He4Mt~ B\a0

This is because the FastCGI server has not been started.

OL(B*Y th"YV%['N8y0

如何解决呢?

M-_#m'[L7u0LI0

刚开始我怀疑是不是nginx挂了,我首先通过ps aux | grep nginx,结果出现:51Testing软件测试网[ T#@)d nJ-m

root      3769  0.0  0.0   5760   692 ?        Ss   Apr21   0:00 nginx: master process /usr/local/nginx/sbin/nginx51Testing软件测试网[ E6L3I8p b(O

www       3770  0.0  0.1  18680 14252 ?        S    Apr21   0:03 nginx: worker process51Testing软件测试网 iKuo6`Xoe3X1[w!h1t

www       3771  0.0  0.1  18680 14252 ?        S    Apr21   0:03 nginx: worker process51Testing软件测试网eC0j} I:vpm

www       3772  0.0  0.1  18712 14276 ?        S    Apr21   0:03 nginx: worker process

k"V c.s$Q&}3Aj$Em0

www       3774  0.0  0.1  18680 14248 ?        S    Apr21   0:03 nginx: worker process51Testing软件测试网v M0q#_W2Iss

www       3776  0.0  0.1  18712 14240 ?        S    Apr21   0:03 nginx: worker process

f4a8i%pqu E0J0

www       3777  0.0  0.1  18680 14252 ?        S    Apr21   0:03 nginx: worker process51Testing软件测试网)J}?1w8v/^a

www       3778  0.0  0.1  18680 14232 ?        S    Apr21   0:02 nginx: worker process51Testing软件测试网q2rFD}5[;P

root     24068  0.0  0.0   5196   756 pts/1    S+   14:33   0:00 grep nginx51Testing软件测试网1Q)l5fyev5I8S%g*L:]?


&|"O,{%^!j AE0

可见nginx是正常的,本来打算重启nginx的:

.c2LE/x5`$N7t!n0

/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf的,51Testing软件测试网I'uPgp,vc_R$@!@^

突然觉得有没有其他方法,有同事提示先在一个目录下运行下test.html和test.php,结果html可以运行,php无法运行。51Testing软件测试网^6N2d3b9zO

证实是php没有启动,我刚才也检测过php的进程,的确是没有php进程,这台服务器我不熟悉,同事帮忙查看了下51Testing软件测试网s|lZ}h/Lz:z O8I

cd /etc/init.d,就是web管理员经常看的地方,是随着系统自动启动的服务,程序等。

t3RY-B-M@0

找到:

$f;A+W Y|0

/usr/local/php/sbin/php-fpm start,首先什么是php-fpm呢?

1g%e5qG7Fl%ZY}g R0

就是FastCGI Process Manager,是一种可选的PHP FastGCI执行模式,有一点很有特点的应用,尤其是一个繁忙的网站中:51Testing软件测试网)V,F oM!f7Y

(1)可适应的进行再生(NEW!)

&ij$CRM'v*Q0

(2)基本的统计功能(Apache's mod_status)

-i@:m W`Gk0

(3)高级进程管理功能,能够优雅的停止/开始51Testing软件测试网x |op`;l4p

(4)能够使用不同的工作用户和不同的php.ini

:u/Z/e)U.uoM0

(5)输入,输出日志记录...

7P)s:yh|;^;C [D0

开启后,一切恢复正常!自己的服务器端技术还是有很多地方使用的不够。需要多学习使用!51Testing软件测试网'V4I|_ZNH7cky



51Testing软件测试网F`PC~6s[z9E

总结,遇到类型问题,常见的问题判断思路:51Testing软件测试网R*jUu!N

1、试检查一下nginx.conf的设置,是不是有limit的设置,比如limit_zone、limit_conn,这些参数也是有影响的。51Testing软件测试网U1h sh'h*T

2、检查一下防火墙,是不是有相关的设置限制。51Testing软件测试网$K{q+{i,J\

3、检查一下nginx.conf的设置,看看有没有valid_referers none blocked的防链设置。

Dkj8N^2n0

4、看下访问静态文件是否正常,错误排除~51Testing软件测试网?2[5yY"r'L


:? b2kO%fc S0


&\$z(Ot|m,ve0

OK,如上只是一些猜测~

!\%Hj(^\1b|'z"U0

具体原因,具体分析~

3~)\TfY*oBp0

随着越来越多的系统采用nginx,大家有必要了解些nginx的基础知识~

[l*A!@+U,wS:^0
51Testing软件测试网0e7a&d&d8P:nE tGKp
51Testing软件测试网 W'ieBA8O-qd
原文http://www.jianshu.com/p/d40fa5de6348

TAG: Linux linux

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar