nginx 负载均衡502问题

2023-05-16

项目架构:nginx+php fpm 负载均衡

负载均衡关键配置如下:

		#引入负载均衡配置
		include proxy.conf;
       #负载均衡
		upstream test_balance {
      server 172.28.196.xxx:80 weight=100; #远端服务
      server 127.0.0.1:20000  weight=100;
      keepalive 256;
    }

出现问题:

当某个php服务报错后,整个负载均衡返回502,并且非报错接口同样返回502,问题非常严重,因为php的优势就是解析执行,不相干代码应该不会干扰才对,但上负载后出现 只要整个项目某个接口返回500,短时间内所有接口都会返回502

解决:

一:设置 max_fails=1 跟 fail_timeout=1
max_fails默认值为1,fail_timeout默认值为10秒。

nginx可以通过设置max_fails(最大尝试失败次数)和fail_timeout(失效时间,在到达最大尝试失败次数后,在fail_timeout的时间范围内节点被置为失效,除非所有节点都失效,否则该时间内,节点不进行恢复)对节点失败的尝试次数和失效时间进行设置,当超过最大尝试次数或失效时间未超过配置失效时间,则nginx会对节点状会置为失效状态,nginx不对该后端进行连接,直到超过失效时间或者所有节点都失效后,该节点重新置为有效,重新探测.

通过上面可知道,返回502原因就是所有节点都探测失败,但是没到失效时间(10s),这样10s内所有访问都将被返回502(没有节点可用)
通过设置 fail_timeout=1 让nginx 在1s后自动刷新节点状态,也就是只要1s后不报错的接口是可以正常访问的,之前默认是要10s,就是一个接口报错 整个项目10s内都是502!

修改后配置如下:

       #负载均衡
		upstream test_balance {
      server 172.28.196.xxx:80 max_fails=1 fail_timeout=10 weight=100; #远端服务
      server 127.0.0.1:21688 max_fails=1 fail_timeout=10 weight=100;
      keepalive 256;
    }

第二:修改proxy.conf 里的 proxy_next_upstream 配置,使后端返回500 状态不标记为失败

Nginx 默认判断失败节点状态以connect refuse和time out状态为准,不以HTTP错误状态进行判断失败,因为HTTP只要能返回状态说明该节点还可以正常连接,所以nginx判断其还是存活状态;除非添加了proxy_next_upstream指令设置对404、502、503、504、500和time out等错误进行转到备机处理,在next_upstream过程中,会对fails进行累加,如果备用机处理还是错误则直接返回错误信息(但404不进行记录到错误数,如果不配置错误状态也不对其进行错误状态记录),综述,nginx记录错误数量只记录timeout 、connect refuse、502、500、503、504这6种状态,timeout和connect refuse是永远被记录错误状态,而502、500、503、504只有在配置proxy_next_upstream后nginx才会记录这4种HTTP错误到fails中,当fails大于等于max_fails时,则该节点失效。

修改后 proxy.conf 配置

proxy_temp_path /www/server/nginx/proxy_temp_dir;
proxy_cache_path /www/server/nginx/proxy_cache_dir levels=1:2 keys_zone=cache_one:20m inactive=1d max_size=5g;
client_body_buffer_size 512k;
proxy_connect_timeout 60;
proxy_read_timeout 60;
proxy_send_timeout 60;
proxy_buffer_size 32k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_next_upstream error timeout invalid_header http_503 http_404;
proxy_cache cache_one;

修改完后 php 报错将不再出现502,问题解决

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nginx 负载均衡502问题 的相关文章

随机推荐

  • 华为OJ_2129_素数伴侣

    输入 有一个正偶数N xff08 N 100 xff09 xff0c 表示待挑选的自然数的个数 后面给出具体的数字 xff0c 范围为 2 30000 输出 输出一个整数K xff0c 表示你求得的 最佳方案 组成 素数伴侣 的对数 输入
  • 深度学习-神经网络之函数拟合

    理论上神经网络可以拟合任意的函数 xff08 应该用逼近更贴切一些 xff09 定义好神经网 xff0c 送进去x和y xff0c 模型就学完了 但实际上 xff0c 远没有这么简单 不信 xff0c 我们来看个简单例子 拟合一个y 61
  • XServer基本概念 + x11vnc配置远程桌面

    前言 读研发论文难啊 xff0c 之前所有的blog都写在了自己的笔记本上 xff0c 因为觉的写的太好了浪费时间 xff0c 自己可以看懂就够了 xff0c 但是白岩松老师的 34 机会大多数取决于别人背后怎么评价你 34 和雄子的 将复
  • LCD1602按照5x7点阵显示字符,可显示一些简单的汉字

    xff01 本博客是 LCD1602自定义点阵字符 的学习笔记以及补 xff08 chao xff09 充 xff08 xie xff09 LCD1602能存8个自定义字符 首地址分别为0X40 0X48 0X50 0X58 0X60 0X
  • mysql修改root密码

    打开mysql命令终端 MySQL 8 0 Command Line Client xff0c 然后输入密码进入 紧接着输入如下命令 xff0c 可将密码更改为 rootcgcl alter user root 64 localhost i
  • Linux下vncviewer和vncserver的安装

    1 安装vncserver xff08 1 xff09 需要以root用户进行vncserver的安装 xff0c 命令行为 xff1a yum install tigervnc server xff08 2 xff09 安装vncview
  • 怎样把shell结果赋值给变量 | shell 中获取命令语句结果的方式

    怎样把shell结果赋值给变量 xff0c shell 中获取命令语句结果的方式 xff0c 通常采用以下两种方式 xff1a 1 执行符号方式 96 96 如 xff1a a 61 96 echo abc 96 echo a abc 2
  • CSS的替换元素

    CSS的 替换元素 xff1a 通过修改某个元素的属性值呈现的内容就可以被替换的元素 替换元素的特性 xff1a 内容不受页面上的CSS的影响 也就是样式表现在CSS作用域之外大部分有自己默认的尺寸 xff0c lt img gt 标签没有
  • Jack 服务编译问题 Android 7.0

    jack 服务常见错误解决方法 当你编译Android时 xff0c 你不需要修改任何内容 Jack是Andriod M的默认编译工具 只需使用标准的makefile命令执行即可 当第一次执行jack时 xff0c 它会在你的机器上启动一个
  • Tomcat+Nginx+HTTPS

    root 64 lb01 conf d cat etc nginx conf d proxy zrlog oldboy com conf upstream zrlog server 172 16 1 7 8080 server 172 16
  • PHP多进程异步处理复杂接口类似微服务(企业真实案例)

    需求 用户下单 推荐合师傅给用户 类似滴滴派单 场景 在线服务平台有各类技术师傅入驻 顾客在下单后需要根据在线师傅及顾客位置计算推荐总分排行后返回推荐的师傅给用户 问题 1 php fpm 框架 无法多线程工作 2 平台师傅有多个评分属性
  • Swoole数据库连接池分析及实现

    使用PHP swoole 由于其内存常驻及协程特性 一般是需要使用数据库链接池来减少链接创建的开支的 一个连接池的实现难点在哪 下面分析 1 如何判断是否该获取新的链接 A 默认规则一个协程对应一个数据库连接 同一个协程里应该返回同一个链接
  • Api接口数据安全及数据加密方式主要流程实现

    简述接口数据安全的主要实现方式 一 数据校验 常用算法 MD5 SHA1 流程 1 前端生成数据后按照约定方式生成一个sign 校验字段 一般通过MD5或者SHA1 方式 一并提交给后端 2 后端获得参数后通过同样的方式生成sign 然后跟
  • 简述PHP执行流程

    目的 xff1a 本文主要介绍PHP执行流程 目的是梳理php代码是如何最终转换成为机器二进制指令而被执行的 参考文章 xff1a https blog csdn net diavid article details 81035188 PH
  • Java为啥比PHP快?

    一直都说php比java要慢 今天从理论跟实际测试看看php是否真的慢 慢在哪里 一 运行模式对比 java 一般用java 语言开发的网站项目都是以命令行模式运行 部分可能以可执行文件 xff08 exe xff09 的形式运行 php
  • PHP微服务 hyperf+nacos使用

    PHP微服务 hyperf 43 nacos使用 这里简单说下微服务 及架构方面东西 1 微服务对php 43 fpm 模式意义不是很大 原因就是php 43 fpm 天生支持模块拆分 热更新 如果只是性能上的考虑 那php 43 fpm
  • PHP项目临时拓容Nginx负载均衡实操记录

    项目域名 test baidu com 服务器A 127 0 0 1 内网ip 原有服务器 服务器B 172 30 228 254 内网ip 需求 项目本在服务器A中正常运行 现在临时搞活动 需要拓容一台 多台服务器 在最小成本跟改动下完成
  • layui templet中html标签获取js全局变量方法

    开发中涉及layui中 xff0c 在使用到table的模板方法时templet xff0c 会遇到其内部除了使用table field xff08 此处通过d 来获取 xff0c 就不啰嗦了 xff09 然后如果想获取某个外部js中的全局
  • PHP分布式部署代码同步Git实现

    PHP 分布式部署后 代码自动同步实现 项目架构如下 需要更新代码时我们只需要把代码传到主服务器后通过定时任务主服务器自动push 代码到Git服务端 之后其他从服务器则自动从Git云端拉取最新的代码即可 需要用到 expect 软件 安装
  • nginx 负载均衡502问题

    项目架构 nginx 43 php fpm 负载均衡 负载均衡关键配置如下 引入负载均衡配置 include proxy conf 负载均衡 upstream test balance server 172 28 196 xxx 80 we