最近一直在配置nginx作为整个系统的前端,今天测试时偶然发现了一个可怕的BUG,使用的是最新Linux下的的0.8.52版的nginx。
这个BUG可能导致的问题是,某个nginx进程会无限的申请占用系统内存空间,并且保持一定的CPU占用率(比率还不低),直到系统内存及swap耗光导致死机。并且,如果你仅仅只是nginx-squit,那么,那个吃内存的进程其实并没有结束掉,还是继续占内存,吃CPU,只能将那个进程kill掉。其实这个BUG很可怕的,nginx一般做为整个系统的前端,如果nginx挂掉,后面的都Over了。
可能触发BUG的配置:
如果你使用了nginx的反向代理功能,并且后端有多台主机,upstream结构体里面的某台主机使用了backup标识,也就是平时不访问这台主机,当其它机子都挂掉后才使用这台作为备用机;并且使用了proxy_next_upstreamhttp_404类似的配置,也就是如果出现了404无法找到页面的配置,则将请求转发到下一台可用的后端主机。这两个配置本来都是用于容错的,但是,当两个一起配置时,并且访问了一个会导致404错误的URL时,你就等着悲剧吧=A=