
node.js サーバーでリクエストがドロップされます。テスト ケースを簡略化しましたが、システム設定に問題があるはずです。私は開発者で、サーバー管理の経験がほとんどないので、何か明らかなことを見逃しているに違いありません。サーバーは Digital Ocean 上にあり、Ubuntu 上の MEAN の標準設定になっています。サーバー設定はあまり変更していません。どこを確認すればよいでしょうか。
以下はノード サーバーのコードです (実際に実行されているコードです)。
var http = require('http'),
express = require('express'),
path = require('path');
var app = express();
var rcount=0;
app.use(function(req, res, next) {
console.log('--'+rcount+':'+req.protocol+'://' + req.headers.host + req.originalUrl);
rcount++;
next();
});
app.use('/js',express.static(path.join(__dirname, 'public/js'), {maxAge: 86400000}));
http.createServer(app).listen(9876, function(){
console.log('Express server listening on port 9876');
});
包囲攻撃を受けた場合、次のようなことが起こります (長くて申し訳ありませんが、画像を見るために必要です)。サーバー側のロガーは、Express がタイムアウトしたリクエストを受信しなかったことを示しています。テスト環境では、プロキシなどはなく、図に示すように、ノードは 9876 上で直接実行されます。
MacBook-Air-alex:www alex$ siege -iv http://xxx.xxx.xxx.xxx:9876/js/animatescroll.js
** SIEGE 3.0.7
** Preparing 15 concurrent users for battle.
The server is now under siege...
HTTP/1.1 200 0.10 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.11 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.11 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.12 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.12 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.13 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.13 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.10 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.11 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.11 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.13 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.14 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.12 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.13 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.11 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.13 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.10 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.12 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.13 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.12 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.10 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.13 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.11 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.14 secs: 7686 bytes ==> GET /js/animatescroll.js
[error] socket: 209698816 connection timed out.: Operation timed out
[error] socket: 212381696 connection timed out.: Operation timed out
[error] socket: 208089088 connection timed out.: Operation timed out
[error] socket: 207015936 connection timed out.: Operation timed out
[error] socket: 209162240 connection timed out.: Operation timed out
HTTP/1.1 200 0.14 secs: 7686 bytes ==> GET /js/animatescroll.js
[error] socket: 208625664 connection timed out.: Operation timed out
[error] socket: 205942784 connection timed out.: Operation timed out
[error] socket: 206479360 connection timed out.: Operation timed out
[error] socket: 205406208 connection timed out.: Operation timed out
[error] socket: 211308544 connection timed out.: Operation timed out
[error] socket: 210771968 connection timed out.: Operation timed out
HTTP/1.1 200 0.13 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.14 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.15 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.13 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.11 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.13 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.40 secs: 7686 bytes ==> GET /js/animatescroll.js
[error] socket: 210235392 connection timed out.: Operation timed out
HTTP/1.1 200 0.19 secs: 7686 bytes ==> GET /js/animatescroll.js
[error] socket: 204869632 connection timed out.: Operation timed out
HTTP/1.1 200 0.11 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.13 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.16 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.16 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.17 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.10 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.13 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.12 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.14 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.13 secs: 7686 bytes ==> GET /js/animatescroll.js
[error] socket: 211845120 connection timed out.: Operation timed out
HTTP/1.1 200 0.12 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.12 secs: 7686 bytes ==> GET /js/animatescroll.js
HTTP/1.1 200 0.13 secs: 7686 bytes ==> GET /js/animatescroll.js
答え1
これはデータセンターの問題でした。別のデータセンターでサーバーのコピーを実行して診断しました。
文句を言う暇もなく、私が気付いた時にはすでに修正されていました。3日かかりました。Digital Ocean に感謝します!