我們有一個節點應用程序在Amazon Elastic Load Balancer(ELB)後面運行,它在有多個併發請求時以及每個請求需要時間處理時隨機地拋出502錯誤。最初,我們試圖將ELB的閒置超時時間增加到5分鐘,但我們仍然獲得了502個響應。Amazon ELB拋出的NodeJs應用程序拋出502
當我們聯繫亞馬遜團隊時,他們說這是因爲後端在5秒後關閉與ELB的連接。
ELB將發送HTTP-502回到你的客戶,原因如下:
- 負載平衡器嘗試建立連接時,從目標收到一個TCP RST。
- 目標關閉與TCP RST或TCP FIN的連接,同時負載平衡器向目標發出未完成的請求。
- 目標響應格式錯誤或包含無效的HTTP標頭。
- 使用了一個新的目標羣體,但沒有目標已通過初始健康檢查。目標必須通過一項健康檢查才能被視爲健康。
我們試圖設置我們的應用程序的保活/超時大於ELB空閒超時(5分鐘),所以ELB可以負責打開和關閉連接。但是,我們仍然面臨502錯誤。
JS:
var http = require('http');
var express = require('express');
var url = require('url');
var timeout = require('connect-timeout')
const app = express();
app.get('/health', (req, res, next) => {
res.send("healthy");
});
app.get('/api/test', (req, res, next) => {
var query = url.parse(req.url, true).query;
var wait = query.wait ? parseInt(query.wait) : 1;
setTimeout(function() {
res.send("Hello!");
}, wait);
});
var server = http.createServer(app);
server.setTimeout(10*60*1000); // 10 * 60 seconds * 1000 msecs
server.listen(80, function() {
console.log('**** STARTING SERVER ****');
});
這可能對您很有意思:https://github.com/hapijs/hapi/issues/3738#issuecomment-364213653 –