nginx 负载均衡502问题

news/2024/7/10 2:43:34 标签: nginx, 负载均衡, 运维

nginxphp_fpm__2">项目架构: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,问题解决


http://www.niftyadmin.cn/n/110377.html

相关文章

项目管理有职业发展前景么?

第一个问题:在中国「项目管理」的专业性的体现/认同度如何?缺少专业知识对未来工作选择的限制程度如何? 由于现在有不少跨专业从业者,他们通过自学考证等途径转行做项目管理,并且取得了不错的成就,所以尽管…

语义分割前储知识

CNN中的Layers 除了正向传播计算loss,反向传播更新parameters,我们还需要知道参数是如何计算的,这个很重要。 我们这里介绍几个在deep learning中经常用到的几个层,dense layer(全连接层),con…

时间API在更新,传奇已经谢幕,但技术永远不死

(Bill Joy(左一),Vinod Khosla(左二),Andy Bechtolsheim(右二),Scott McNealy(右一) ) CSDN 博文征集活动(和日期相关的代码和bug):点击这里 各位 “big guys”,这篇博文…

java:基于guava缓存(LoadingCache)实现结果缓存避免重复计算

在项目设计中,我们经常会遇到这样一种场景,输入一个参数,进行运算返回一个值,输入值和返回值是固定的映射关系。 比如我想通过反射判断一个方法(Method)的最后一个参数名是否是为指定的格式: 实现方法如下:…

HTML CSS百科及常用嵌入方式

HTML 样式- CSS CSS(Cascading Style Sheet)可译为“层叠样式表”或“级联样式表”,它定义如何显示 HTML 元素,用于控制Web页面的外观。通过使用 CSS 实现页面的内容与表现形式分离,极大提高了工作效率 。样式存储在样…

u盘误删的文件怎么找回

u盘误删的文件怎么找回?u盘的特点之一就是极其便携,可以容纳各种格式的数据和文件,需要时可以直接使用。每次使用都会或多或少的存放一些文件,但有使用就会有删除,为了不影响使用性,清理存储空间是必要的。清理中如果…

【zlkmedia】rtp处理代码走读

zlkmedia的特点就是专门为安防定制了一系列直播、rtc相关流媒体协议处理rtp包的处理是贯穿始终的。本文是阅读rtp包处理代码的笔记。服务器收到rtp包 D:\XTRANS\ZLMIA\ZLMediaKit-offical\src\Rtp\RtpServer.cppvoid onRecvRtp(const Socket::Ptr &sock, const Buffer::Ptr…

更多单词/词组/短语补充和总结(二)

auto 美 /[ˈɔːtoʊ] n.汽车adj.与汽车有关的,汽车的。不要记成“自动的” mobile 美 /[ˈmoʊbl] adj.可移动的;流动的;不要记成“手机”,手机是mobile phone automobile 美 /[ˈɔːtəməbiːl] n.汽车adj.自动的 automatic 美 /[ˌɔːtəˈmtɪk]…