Nginx故障排查思路

时间:2024-03-07 17:05:48

一 Nginx工作场景

Nginx是最受欢迎的HTTP服务器之一,在我们公司扮演着举足轻重的作用,做为我们公司的核心组件之一,在整个访问链路上是不可或缺的一环,而且, Nginx组件、模块、版本众多, 所以如何管理好Nginx将显得至关重要.

Before we get started,我们先来看看Nginx的工作场景:

「1」静态资源的web服务器

「2」http、smtp、pop3等协议的反向代理服务器

「3」缓存加速和负载均衡

我们公司主要用到了Nginx的第二个功能,即反向代理服务器,我们的服务都通过Nginx代理至Real Server,既保证Real Server的安全性,也起到了访问流量的负载均衡.

二 Nginx问题处理流程

1 Nginx自身排查

如果出了问题,第一时间检查是否是nginx自身因素导致的服务不可用,

「1」检查Nginx服务是否启动,

​ sudo lsof -P -n -i :80 -i :443 | grep LISTEN

​ ps aux | grep nginx

「2」如果服务宕掉,先试着启动服务

​ sudo /opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf

「3」如果2成功,则访问对应的服务,看是否正常,

如果2失败,则需要检查nginx的配置文件,以及各功能模块,为了能够更加精确的定位,我们需要开启debug模式.然后执行:

​ nginx –t

​ tail –f /data/log/nginx/error.log

「4」可查看nginx编译时的参数,看看是不是有些功能模块未编译进来.

​ nginx -V

2 外界因素排查

这里的外界干扰主要Nginx这一环以外的问题导致服务不可用,像Navigator,APIRouter等.

「1」 如果是新发的配置,确保Navigator发布的版本生效

「2」 绑定该nginx集群对应的LB的外网地址到本地hosts,观察访问服务是否可用

「3」 检查DNS records

如果「2」可用,则说明是Nginx之前的环节出了问题,此时需使用dig 工具查看看解析是否正确.如果是解析错误,修正即可.

​ dig 域名

​ dig –t A +trace 域名

3 根具返回客户端状态判断故障发生点

「1」3xx类响应码

​ 3xx类状态码,通常为重定向类响应状态码,其中301为永久重定向,302为临时重定向,304表示从缓存中响应,如果访问某域名是,出现跳转问题,那么就要检查nginx的配置,看看rewrite规则是否合理,location是否出现优先级问题.

「2」4xx类响应码

​ 4xx类状态码,通常来说表示客户端类错误,

​ 如果出现400错误, 通常表示client发送了一个无效的请求.如果一个http1.1的请求没有host域,那么server应该给client段发送400的状态码,表明这个请求server不能处理。

​ 如果出现403错误,会提示Forbidden,表示禁止访问,这类原因通常来说会有2种可能,一是:客户端请求的资源做了黑白名单,或者是一些特殊的资源(例如:status页面);二是:

​ 如果出现404错误,会返回NOT Found状态吗,产生这种错误,一般是用户发起了错误的请求,请求的资源不存在. Nginx需要访问目录,但是autoindex选项被关闭.

「3」5xx类响应码

​ 500类响应码通常表示服务器端出现了问题,这里可能是nginx除了问题,也又可能是后端Real Server出现了故障.

​ 502错误会返回Bad Gateway,及网关错误,这中情况,可能与cgi类型有关

​ 504 错误会返回Time Out,通常表示nginx作为代理时,没有及时从上游服务器收到请求,这中情况要么是后端服务处理不了nginx转发的请求,导致请求超时,要么就是后端服务器除了故障,比如服务意外停止…

三 常见的状态码

状态码信息查询地址:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status

状态码 含义 解释
状态码 含义 解释
200 OK 请求正常处理完毕
301 Moved Permanently 永久重定向
302 Found 临时重定向
304 Not Modified 条件式请求,资源未该被修改
400 Bad Request 请求报文语法错误或参数错误
401 Unauthorized 需要通过HTTP认证,或认证失败
403 Forbidden 请求资源被拒绝(例如:黑名单,状态检测资源等)
404 Not Found 无法找到请求资源
409 Conflict 表示请求与当前服务器端的状态相冲突;冲突最有可能发生在对 PUT 请求的响应中。例如,当上传文件的版本比服务器上已存在的要旧,从而导致版本冲突的时候,那么就有可能收到状态码为 409 的响应。
500 Internal Server Error 服务器故障或Web应用故障
502 Bad Gateway 代理服务器,从上游服务器中接收到的响应是无效的
503 Service Unavailable 服务器超负载或停机维护
504 Gateway Timeout 代理服务器无法在规定的时间内获得想要的响应
505 HTTP Version Not Supported 表示服务器不支持请求所使用的 HTTP 版本