首页 > 系统相关 >nginx故障实例--附带排查思路

nginx故障实例--附带排查思路

时间:2024-03-21 18:45:16浏览次数:16  
标签:请求 Nginx -- bind nginx emerg 附带 80

nginx故障实例--附带排查思路

一 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 版本

补充

[root@web html]# nginx
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()


此端口被占用了,80端口被其他进程占用了,找出来杀掉
或者nginx配置其他端口


解决
1.寻找进程-杀进程---

找
ps aux |grep nginx
ss -tulpn |grep nginx
netstat -tulpn |grep nginx

杀
kill  nginx 
kill -9 nginx
pkill nginx
pkill -9  nginx



2.配置其他端口

找到自己的nginx配置目录,如果是自己编译安装的,直接配置其他端口就可了,listen哪里的监听 后面改一下其他端口


不知道如何查找的,可以用ps +grep  或者which  



tips:
查找Nginx的安装路径有多种方法,以下是一些常见的方式:

1. **通过`which`命令查找可执行文件路径**:
   ```bash
   which nginx
   ```
   这将返回Nginx的可执行文件路径,通常该路径所在的目录就是Nginx的主要安装目录的一部分。

2. **查看进程信息**:
   ```bash
   ps -ef | grep nginx
   ```
   查看Nginx的运行进程信息,找到进程对应的命令行路径,该路径就是Nginx可执行文件的路径。

3. **通过配置文件路径推测**:
   Nginx的配置文件通常位于`/etc/nginx/nginx.conf`,而配置文件所在目录的上级目录往往是Nginx安装目录的一部分。

4. **通过系统服务信息**:
   对于使用systemd的系统,可以查看Nginx服务单元文件来获取相关信息:
   ```bash
   systemctl cat nginx | grep 'ExecStart='
   ```
   或者
   ```bash
   systemctl status nginx | grep 'Main PID:'
   ```
   这样可以从输出中看到Nginx服务的启动命令和进程ID,进而推断出Nginx的安装路径。

5. **手动安装时指定的路径**:
   如果你是手动编译安装的Nginx,并且记得当时使用了`--prefix`选项指定安装路径,那么你就可以直接去那个路径下寻找。

综合以上方法,通常能找到Nginx的安装路径。

标签:请求,Nginx,--,bind,nginx,emerg,附带,80
From: https://www.cnblogs.com/nwq1101/p/18088022

相关文章

  • nginx入门-31-学习笔记
    nginx入门-31-学习笔记环境环境:虚拟机ip:10.0.1.0网关:10.0.1.2子网掩码:255.255.255.0测试机器ip:10.0.1.101概念1.安装nginx软件安装:yum安装yuminstallepel-releaseyuminstallnginx-ysystemctlstartnginx编译安装(生产环境)yum-yinstallpcr......
  • 17. 电话号码的字母组合c
    /***Note:Thereturnedarraymustbemalloced,assumecallercallsfree().*/chartemp[10];charc[10][5]={"","","abc","def","ghi","jkl","mno","pqrs","tuv",&q......
  • 第二十七天
    第二十七天作业0使用软件画一个服务器架构图压缩包架构图案例可以模仿画一个熟悉使用画图软件1.使用守护进程方式同步网站目录/html/www目录到备份服务器上写出操作笔记方便工作使用模版机制作配置1.模板机优化配置---hosts文件配置\cp/etc/hosts{,.bak......
  • 第二十九天
    第二十九天作业1.把/var/html/www目录里面项目每天压缩备份一次实战--并使用定时任务每天零点做备份思路/var/html/www备份目录/var/html/备份到目标目录方式一:1.利用crontab-e添加下面这行00***tarzcvfP/var/html/www_$(date+\%F).tar.gz/html/......
  • SRIO(Serial RapidIO)PCS层 64B/67B编码介绍(二)
     64b/67b传输码字    PCS使用的64b/67b传输码将64位数据块和/或控制信息编码为67位码字,用于传输,并在接收时反转过程。码字有两种类型:“数据”码字和“控制”码字。数据码字编码64位的数据。控制码字编码64位的控制信息或数据和控制信息的某种组合。码字格式  ......
  • 二叉树的深度优先遍历(力扣94,144,145)
    文章目录题目前知二叉树的遍历方式有什么?递归和迭代是什么?题解一、思路二、解题方法三、Code总结题目Problem:144.二叉树的前序遍历Problem:94.二叉树的中序遍历Problem:145.二叉树的后序遍历前知二叉树的遍历方式有什么?二叉树主要有两种遍历方式:......
  • 第五章学习指南
    Chap5运算符、表达式和语句单词:scale比例。shoe鞋子#include<stdio.h>#defineADJUST7.31​intmain(void){constdoubleSCALE=0.333;doubleshoe,foot;shoe=9.0;foot=SCALE*shoe+ADJUST; printf("Shoesize(men's)footlength\n"); prin......
  • ChatGPT:实现高效论文写作的秘密武器
    ChatGPT无限次数:点击直达近年来,自然语言处理领域取得了巨大的进步,为研究人员提供了更高效的论文写作工具。其中,ChatGPT3.5Turbo作为一种强大的语言生成模型,为论文写作提供了秘密武器。在本文中,我们将介绍ChatGPT的功能和优势,并通过多个示例来展示其在高效论文写作中的应用......
  • 探索ChatGPT:改变您的写作方式
    ChatGPT无限次数:点击直达探索ChatGPT:改变您的写作方式在现代科技的快速发展中,人工智能技术的应用正变得越来越普遍。ChatGPT是OpenAI开发的一款强大的自然语言处理模型,而ChatGPT3.5Turbo版本更是在其基础上进行了改进和优化。本文将探索ChatGPT3.5Turbo的功能和用途,以......
  • Transformer
    建议大家看一下李宏毅老师讲解的Transformer,非常简单易懂(个人觉得史上最强transformer讲解):https://www.youtube.com/watch?前言Transformer由论文《AttentionisAllYouNeed》提出,现在是谷歌云TPU推荐的参考模型。论文相关的Tensorflow的代码可以从GitHub获取,其作为Tensor2T......