Http状态码502常见原因及排错思路(实战)

Http状态码502常见原因及排错思路

502表示Bad Gateway。当Nginx返回502错误时,通常表示Nginx作为代理服务器无法从上游服务器(如:我们的后端服务器地址)获取有效的响应。导致这种情况的原因有很多:

  1. 后端服务器故障
  2. nginx配置问题
  3. 高负载或者资源耗尽
  4. nginx与后端服务器通信问题
  • 必出现502:应用挂了(服务端返回RST,nginx或者其他发出502报错)
  • 偶尔出现502:CPU使用率高 / QPS增加 / nginx read超时时间设置问题

504 Gateway timeout 网关超时

  • 一般指nginx做反向代理服务器时,所连接的服务器tomcat无响应导致的。
  • 为了完成您的 HTTP 请求,该服务器访问一个上游服务器,但没得到及时的响应
  • nginx超过了自己设置的超时时间

502常见原因及排错思路

1. 后端服务器故障

检查后端服务器是否正常运行,网络连接是否正常。
可以通过 ping 命令检查网络连接:ping your_backend_server_ip
通过 telnet 命令检查后端服务器的端口是否开启:telnet your_backend_server_ip your_backend_server_port
通过 curl 命令测试后端服务器的响应:curl -I http://your_backend_server_url

2. 网关配置问题:代理地址、请求超时时间

以Nginx作为网关为例:

检查 Nginx 配置文件中的代理设置,确保代理到后端服务器的配置正确。
检查超时时间配置:proxy_read_timeout 2s; #vim /opt/nginx/nginx.conf
检查 Nginx 错误日志,查看是否有相关的错误信息:tail -f /var/log/nginx/error.log

3. 后端服务器高负载或者资源耗尽:某一时刻qps过高

# 可能是某一瞬间,服务器的qps过高导致502
可以使用 top 命令查看系统资源(CPU、MEM)使用情况

4. 网关与服务器通信问题(网络连接、端口开放等)

检查 Nginx 与后端服务器之间的防火墙设置,确保端口开放。
检查 Nginx 与后端服务器之间的网络连接是否正常,可以通过抓包工具(如 tcpdump)检查网络通信情况。

实战

今天测试反馈前端页面访问出错,因为我们前端是通过nginx请求到后端的,所以查看浏览器上查看网络请求,发现报502Bad Gateway。
📢:本文ip与端口等信息均以加密

1. 查看nginx.conf:观察是否是代理配置错误

首先想到是不是nginx的代理配置出了问题,结果发现nginx.conf配置文件是没有问题的,配置的代理也是正确指向我们后端服务的地址。

    server {
    listen 80;
    location / {
        proxy_pass http://localhost:6020;
    }
        location /backend-api {
           rewrite ^/backend-api(.*)$ $1 break;
           proxy_pass http://192.168.64.145;
        }
    }

查看能否ping通后端服务器,发现也是通的

ping 192.168.64.145

2. 查看/var/log/nginx/error.log:查看nginx报错信息

然后准备查看nginx的报错日志信息

tail -f /var/log/nginx/error.log

发现错误信息如下:

2023/11/12 11:07:26 [error] 49448#49448: *1998 connect() failed (111: Connection refused) while connecting to upstream, client: 10.3.0.52, server: , request: "GET /backend-api/list HTTP/1.1", upstream: "http://192.168.64.145:80/list", host: "10.16.13.137", referrer: "http://192.168.64.120/page/xx"

可以看出是nginx请求我们后端的服务器没有请求成功。

3. 检查后端服务是否正常运行

查看nginx请求的后端服务器是否正常工作
因为我们使用的是k8s部署服务,所以直接观察每个pod运行状态即可

# 查看服务pod是否是running状态
kubectl get pods -n xxx

运行命令后,发现处理服务的pod状态都是正常的。

然后想到nginx请求我们的是80端口,于是通过检查端口是否处于Listen状态即可

netstat -ano | grep 80

结果发现服务器上的80端口没有被过滤出来,马上联想到是不是80端口没有开放出来

firewall-cmd --zone=public --list-ports | grep 80
# 执行命令后发现FirewallD is not running
# 查看防火墙状态
systemctl status firewalld
# 发现防火墙已经是关闭状态(为了方便测试,暂时关闭),因此防火墙不会阻拦80端口的请求

这个时候突然想到是不是ingress问题,执行命令查看k8s event信息

# 发现是有报磁盘资源不足
kubectl get event
# 查看pod详细信息,包括event
# kubectl describe pod podName

在这里插入图片描述

# 查看所有节点状态
kubectl get pod -n kube-system -o wide
# kubectl get pods -A -o wide

在这里插入图片描述
发现配置的ingress pod被驱逐。

# 查看磁盘使用情况,清理对应磁盘之后发现ingress正常工作
df -h

拓展:HTTP状态码合集

HTTP状态码合集

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/135433.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot+Vue的博物馆管理系统

基于springbootvue的博物馆信息管理系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringBootMyBatisVue工具:IDEA/Ecilpse、Navicat、Maven 系统展示 主页 登录界面 管理员界面 用户界面 摘要 基于SpringBoot和Vue的博物馆…

vue3响应式api

响应式api——compositon api setup: 不要再想this问题执行是在beforeCreated之前 beforeCreated:也就是创建了一个实例 created:挂载了数据 通过形参props接收,只读 以后所有代码都写到setup中 判断是否只读:isReadon…

lc228. 汇总区间

暴力解法:遍历数组,判断数组是否连续递增。将连续递增的数据的首尾的数据分别存储在map集合的key和value之中,输出时判断首尾值是否相同采用两种方式输出 复杂度分析 时间复杂度:O(n),其中 n 为数组的长度。空间复杂…

2023亚太杯数学建模A题思路

文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料5 最后 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 2023年第十三…

【LeetCode】每日一题 2023_11_12 每日一题 Range 模块

文章目录 刷题前唠嗑题目:Range 模块题目描述代码与解题思路 刷题前唠嗑 LeetCode? 启动!!! 嗯?怎么是 hard,好长,可恶,看不懂,怎么办 题目:Range 模块 题…

线索二叉树(存储结构,线索化,寻找前驱/后继)

目录 1.线索二叉树1.中序线索二叉树2.后序线索二叉树3.先序线索二叉树 2.线索二叉树的存储结构3.二叉树的线索化1.中序线索化2.先序线索化3.后序线索化 4.寻找前驱/后继1.中序线索二叉树找后继2.中序线索二叉树找中序前驱3.先序线索二叉树找先序后继4.先序线索二叉树找先序前驱…

[pipe-自写管道] 强网拟态2023-water-ker

程序分析 保护当然都开了, 题目给了一次增加, 释放, 修改一字节堆块的能力, 这里释放堆块后没有将其指针置空从而导致了 UAF. 漏洞利用 这里的堆块大小为 512 字节并是 SLAB_ACCOUNT, 所以可以直接利用管道去构造自写管道从而构造任意读写系统, 详细见大佬博客:【CTF.0x08】D…

Spring学习笔记——AOP(4)

Spring学习笔记——AOP(4) 一、学习AOP1.1 AOP的概述1.2 AOP思想实现方案1.3、模拟AOP的基础代码1.4、AOP的相关概念 二、基于xml配置AOP2.1 AOP基础入门2.2、XML方式AOP配置详解2.3、XML方式AOP原理剖析 三、注解式开发AOP3.1 注解式开发AOP入门3.2 AOP…

SpringBoot原理

1配置优先级: SpringBoot项目当中支持的三类配置文件: application.properties application.yml application.yaml配置文件优先级排名(从高到低): 1. properties配置文件 2. yml配置文件 3. yaml配置文件在SpringBoot…

Java常用设计模式(23种)

文章目录 介绍 设计模式的六大原则 一、创建型模式 1、单例模式(Singleton Pattern) 1)饿汉式 2)懒汉式,双检锁 3)静态内部类 4)枚举 2、原型模式(Prototype Pattern&#xff09…

2023年第十六届山东省职业院校技能大赛中职组“网络安全”赛项规程

第十六届山东省职业院校技能大赛 中职组“网络安全”赛项规程 一、赛项名称 赛项名称:网络安全 英文名称:Cyber Security 赛项组别:中职组 专业大类:电子与信息大类 二、竞赛目的 网络空间已经成为陆、海、空、天之后的第…

【Servlet】 四

本文主要介绍了cookie和session的区别和联系 . 一.cookie 1.cookie是浏览器在本地持久化存储数据的一种机制 cookie的数据从哪里来 服务器返回给浏览器的 cookie的数据什么样 cookie中是键值对结构的数据,并且这里的键值对都是程序员自定义的 cookie有什么作用 cookie可以在…

通过easyexcel导出数据到excel表格

这篇文章简单介绍一下怎么通过easyexcel做数据的导出,使用之前easyui构建的歌曲列表crud应用,添加一个导出按钮,点击的时候直接连接后端接口地址,在后端的接口完成数据的导出功能。 前端页面完整代码 let editingId; let request…

Matplotlib绘图一网打尽【持续更新ing】

2 绘制扇形图 绘制一个展示男女乘客比例的扇形图 得出男女的具体数字 sex_per df["Sex"].value_counts() sex_per # 把画图的包导入进来 import matplotlib.pyplot as plt# 这种绘图方式主要用于有多个子图以及复杂的图形布局的时候。fig,ax plt.subplots()# pl…

Ubuntu虚拟机设置静态IP

目录 1 确定网络信息2 配置网络文件3 更新配置4 验证 网上很多方案都是 sudo vi /etc/network/interfaces 但是在Ubuntu20.04中我的目录i已经没有这个文件夹了,好像就算自己新建通过这种方式也是不能达到静态ip的目的。整理了下面的这种方式,实测最终有效…

第25章_索引优化与查询优化

文章目录 1. 数据准备2.索引失效案例2.1全值匹配2.2最佳左前缀法则2.3主键插入顺序2.4 计算、函数导致索引失效2.5 类型转换导致索引失效2.6 范围条件右边的列索引失效2.7 不等于(! 或者<>)索引失效2.8 is null可以使用索引&#xff0c;is not null无法使用索引2.9 like以…

多孔对跨孔电磁波CT联合反演

多孔对跨孔电磁波CT联合反演 前言 针对单一孔对跨孔电磁波CT反演数据拼接剖面不连续&#xff0c;相邻钻孔间吸收系数差异大的问题&#xff0c;采用多孔对跨孔电磁波CT联合反演。 1、多孔对数据拼接 将所有单一剖面连接为多孔剖面&#xff0c;以‘东大北大’的原则编号。 …

Linux基础开发工具之分布式版本控制系统Git

文章目录 1.Git是什么&#xff1f;1.1介绍1.2影响世界的大牛1.3English Words 2.Git常用指令2.1Git三板斧2.2解决冲突2.3黑名单文件2.4删除本地远端 1.Git是什么&#xff1f; 1.1介绍 史上最浅显易懂的Git教程&#xff01; git是一个软件 gitee/github是一个网站但是他们的主…

微信小程序入门及开发准备,申请测试号以及小程序开发的两种方式,目录结构说明

目录 1. 介绍 1.1 优点 1.2 开发方式 2. 开发准备 2.1 申请 2.2 申请测试号 2.2 小程序开发的两种方式 2.3 开发工具 3. 开发一个demo 3.1 创建项目 3.2 配置 3.3 常用框架 3.3 目录结构说明 3.4 新建组件 1. 介绍 1.1 优点 是一种不需要下载安装即可使用的应用…

Linux-Docker的基础命令和部署code-server

1.安装docker 1.安装需要的安装包 yum install -y yum-utils2.设置镜像仓库 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3.安装docker yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin do…