nginx 502

nginx报错 502 no live upstreams while connecting to upstream
nginx 跟后端创建了大量的连接。没有使用http1.1长连接导致的(默认是http1.0短连接)。
解决方案:在upstream中添加keepalive配置

upstream stream_name{
    server host:port;
    server host:port;

    keepalive 256;
}
location {
...
proxy_http_version 1.1;
proxy_set_header Connection "";
...
}

默认情况下 Nginx 访问后端都是用的短连接(HTTP1.0),一个请求来了,Nginx 新开一个端口和后端建立连接,请求结束连接回收。如果配置了http 1.1长连接,那么Nginx会以长连接保持后端的连接,如果并发请求超过了 keepalive 指定的最大连接数,Nginx 会启动新的连接来转发请求,新连接在请求完毕后关闭,而且新建立的连接是长连接。
nginx1.1.4版本开始支持长连接
同一网段不经过防火墙,不会对长连接状态进行干预;不同网段(生产上)一般都有防火墙,,会对连接状态进行重置
生产上防火墙连接要确认是长连接还是短连接,如果要开通长连接要有链接探测机制,释放无效链接,以免影响防火墙性能。
如果含有Tomcat的话也需要配置server.xml Connector

keepAliveTimeout="60000"
maxKeepAliveRequests="1000000"

Nginx 与后端机器的通信效率更高,后端机器的负担更低。
netstat -n | grep TIME_WAIT

nginx配置了proxy_next_upstream属性,这个属性作用是如果发现请求返回的是后面的配置状态时就会转发到下一个upstream

测试发现,如果每个实例都返回500后,接下来的请求就会出现502,如果访问正常的api,又会恢复正常,说明nginx当发现upstream都为500的时候,就会临时disable所有upstream,也就是上面error.log上出现的“upstream server temporarily disabled”,后续请求就会有“no live upstreams”问题,但是出现502后,新请求会重新检测,当请求是200,就会恢复正常。

解决:问题原因找到了,解决办法也就简单了,这个500一般是服务器端的bug,一般请求都不会直接返回500,出现问题及时解决就好,另外这个使用这个属性时得注意,如果请求是后面枚举的状态时,nginx会直接转到另外一个upstream,所以会出现多个实例都接收到请求的情况,有些情况下是不允许的,所以使用的时候需要分析一下。

原文链接:https://blog.csdn.net/piaohai/article/details/102753168
下面还有一个参数影响重试次数,0表示不限制。:

Syntax: proxy_next_upstream_tries number;
Default: proxy_next_upstream_tries 0;
Context: http, server, location

原文链接:https://blog.csdn.net/christ1208/article/details/106949000/

Nginx默认判断失败节点状态以connect refuse和timeout状态为准,不以HTTP错误状态进行判断失败,

HTTP只要能返回状态说明该节点还可以正常连接,所以nginx判断其还是存活状态除非添加了proxy_next_upstream指令设置对404、502、503、504、500和time out等错误转到备机处理,
nginx记录错误数量只记录timeout 、connect refuse、502、500、503、504这6种状态,timeout和connect refuse是永远被记录错误状态,而502、500、503、504只有在配置proxy_next_upstream参数之后nginx才会记录这4种HTTP错误到fails中;
https://blog.csdn.net/weixin_30621711/article/details/96625770

https://blog.csdn.net/my201110lc/article/details/108245658

另外
proxy_next_upstream error timeout http_500 non_idempotent;
non_idemponent ,Nginx 默认对 non-idempotent 请求,比如 POST /LOCK/PATCH,是不进行重试。常见的情况就是 POST 请求出错后不会重试,需要加上该设置。
官方文档的说明是:
normally, requests with a non-idempotent method (POST, LOCK, PATCH) are not passed to the next server if a request has been sent to an upstream server (1.9.13); enabling this option explicitly allows retrying such requests;
意思是如果不加上non_idempotent,对POST这些不幂等的方法,出错是不会重试的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容