# 卒研 > 方針: go-kawakami.oit.ac.jp のコピーを作り、それをベースに改良する。 ## 作るものと欲しい機能 順次追加するかも 1. ライブ画像配信用に、別ポートで立ち上げるwebサーバ - 想定どおりの要求の場合はAccessLogを書かない 2. 既存のApacheを置き換える、WAF(ウェブアプリケーションファイアウォール)機能つきwebサーバ - URLをチェックし、怪しい要求が来たら対処する - rejectする - dropする - やたら大きなファイルを送りつけて仕返しする(笑) --- ### 1/14報告分 - ホワイトリスト自動作成UI - ドキュメントルート以下を全探索してホワイトリストに登録する - shellスクリプトでもなんでも可 - リスト外ファイル並びにクエリのやたら長いアクセスをブロック - 短時間で複数回のアクセスがあった場合は一定時間そのIPアドレスに対して何も返さない - Python ベンチマーク用クライアント作成 - HTTPのkeepaliveに対応したもの - できれば、Websocketに対応したものも合わせて - 結果次第でwebsocketかHTTPか決定 ### 1/22報告分 - 実験し、うまく行かなかった場合その理由を考察することが大事 - ファイルオープンでの処理負荷に着目し、その部分を改良するプログラムを制作した - しかし処理負荷は軽減できなかった - このことより、負荷はファイルオープンによって発生しているものではなく、HTTPのリクエスト処理に負荷がかかっていると思われる - Websocketを使用し、HTTPのリクエスト・レスポンスの手順を廃することで負荷の軽減を達成することができた(書ければ) ## 2週間目標 ### 10/29 or 31報告予定分 - [x] go-kawakami.oit.ac.jp のコピーサーバーを作る - [x] Node.jsで、最低限要求に応答できるwebサーバを作ってみる。 #### 追加でやったこと - [x] Node.jsで、特定のファイルを返すwebサーバを作る ### 11/25〜29報告予定分 - [x] エラーが発生しても落ちないためを行の追加 (furukawa, ikegami) - go-kawakamiのnoderun以下にあるファイルを参照 - [x] 返すファイルを変更しやすいようにプログラム書き換え (furukawa, ikegami) - 設定ファイルを作るもしくは、行数が短ければプログラムコードの上の方 - [ ] Webサーバ用ベンチマークテストツールを探してみて実行 (furukawa, ikegami) - GoogleのV8エンジンは素晴らしいらしい - [ ] Node.jsのガベージコレクションの頻度などについて調査 (ikegami, furukawa) - ガベージコレクション実行中はプログラムが長時間停止してしまうらしい ### 12/9〜13報告予定分 - [ ] Webサーバ用ベンチマークテストツールを探してみて実行(続き) - **a1秒間に500アクセス以上できるかどうか** - [ ] HTTPS対応(Let's Encrypt) - HTTPと混在するとchromeが弾くようになるため ## memo ``` 150.89.255.21 - - [03/Feb/2020:23:41:59 +0900] "GET /img/usage.jpg HTTP/1.1" 200 57627 "http://150.89.255.61/index.html?ja" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" 150.89.255.21 - - [03/Feb/2020:23:41:59 +0900] "GET /img/usage_en.jpg HTTP/1.1" 200 55206 "http://150.89.255.61/index.html?ja" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" 150.89.255.21 - - [03/Feb/2020:23:41:59 +0900] "GET /img/howitworks_en.jpg HTTP/1.1" 200 69505 "http://150.89.255.61/index.html?ja" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" 150.89.255.21 - - [03/Feb/2020:23:41:59 +0900] "GET /img/a1.jpg HTTP/1.1" 200 89552 "http://150.89.255.61/index.html?ja" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" 150.89.255.21 - - [03/Feb/2020:23:42:00 +0900] "POST /msg/today-msg.txt HTTP/1.1" 200 340 "http://150.89.255.61/index.html?ja" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" 150.89.255.21 - - [03/Feb/2020:23:42:00 +0900] "GET /ramdsk/camera.jpg?page=1580740912233 HTTP/1.1" 200 43749 "http://150.89.255.61/index.html?ja" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" 150.89.255.21 - - [03/Feb/2020:23:42:00 +0900] "POST /msg/top-msg.txt HTTP/1.1" 200 281 "http://150.89.255.61/index.html?ja" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" 150.89.255.21 - - [03/Feb/2020:23:42:00 +0900] "POST /msg/today-msg.txt HTTP/1.1" 200 340 "http://150.89.255.61/index.html?ja" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" 150.89.255.21 - - [03/Feb/2020:23:42:00 +0900] "GET /ramdsk/hourly.json?_=1580740910958 HTTP/1.1" 404 491 "http://150.89.255.61/index.html?ja" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" 150.89.255.21 - - [03/Feb/2020:23:42:00 +0900] "GET /ramdsk/daily.json?_=1580740910959 HTTP/1.1" 404 491 "http://150.89.255.61/index.html?ja" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" ``` ``` 196.52.84.16 - - [08/Jan/2020:06:09:50 +0900] "gamagaeru.com" ":443" "GET /admin/ HTTP/1.1" 301 67 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 196.52.84.16 - - [08/Jan/2020:06:09:52 +0900] "www.gamagaeru.com" ":443" "GET /admin/ HTTP/1.1" 404 196 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 196.52.84.16 - - [08/Jan/2020:06:09:55 +0900] "gamagaeru.com" ":443" "GET /shop/admin/ HTTP/1.1" 301 72 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 196.52.84.16 - - [08/Jan/2020:06:09:56 +0900] "www.gamagaeru.com" ":443" "GET /shop/admin/ HTTP/1.1" 404 196 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 196.52.84.16 - - [08/Jan/2020:06:09:57 +0900] "gamagaeru.com" ":443" "GET /store/admin/ HTTP/1.1" 301 73 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 196.52.84.16 - - [08/Jan/2020:06:09:58 +0900] "www.gamagaeru.com" ":443" "GET /store/admin/ HTTP/1.1" 404 196 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 196.52.84.16 - - [08/Jan/2020:06:10:00 +0900] "gamagaeru.com" ":443" "GET /magento/admin/ HTTP/1.1" 301 75 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 196.52.84.16 - - [08/Jan/2020:06:10:01 +0900] "www.gamagaeru.com" ":443" "GET /magento/admin/ HTTP/1.1" 404 196 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 196.52.84.16 - - [08/Jan/2020:06:10:03 +0900] "gamagaeru.com" ":443" "GET /magento2/admin/ HTTP/1.1" 301 76 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 196.52.84.16 - - [08/Jan/2020:06:10:04 +0900] "www.gamagaeru.com" ":443" "GET /magento2/admin/ HTTP/1.1" 404 196 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 196.52.84.16 - - [08/Jan/2020:06:10:05 +0900] "gamagaeru.com" ":443" "GET /pub/errors/503.php HTTP/1.1" 301 79 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 196.52.84.16 - - [08/Jan/2020:06:10:06 +0900] "www.gamagaeru.com" ":443" "GET /pub/errors/503.php HTTP/1.1" 404 196 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 196.52.84.16 - - [08/Jan/2020:06:10:07 +0900] "gamagaeru.com" ":443" "GET /shop/pub/errors/503.php HTTP/1.1" 301 84 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 196.52.84.16 - - [08/Jan/2020:06:10:08 +0900] "www.gamagaeru.com" ":443" "GET /shop/pub/errors/503.php HTTP/1.1" 404 196 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 196.52.84.16 - - [08/Jan/2020:06:10:09 +0900] "gamagaeru.com" ":443" "GET /store/pub/errors/503.php HTTP/1.1" 301 85 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 196.52.84.16 - - [08/Jan/2020:06:10:10 +0900] "www.gamagaeru.com" ":443" "GET /store/pub/errors/503.php HTTP/1.1" 404 196 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 196.52.84.16 - - [08/Jan/2020:06:10:11 +0900] "gamagaeru.com" ":443" "GET /magento/pub/errors/503.php HTTP/1.1" 301 87 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 196.52.84.16 - - [08/Jan/2020:06:10:12 +0900] "www.gamagaeru.com" ":443" "GET /magento/pub/errors/503.php HTTP/1.1" 404 196 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 196.52.84.16 - - [08/Jan/2020:06:10:13 +0900] "gamagaeru.com" ":443" "GET /magento2/pub/errors/503.php HTTP/1.1" 301 88 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 196.52.84.16 - - [08/Jan/2020:06:10:14 +0900] "www.gamagaeru.com" ":443" "GET /magento2/pub/errors/503.php HTTP/1.1" 404 196 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 196.52.84.16 - - [08/Jan/2020:06:10:15 +0900] "gamagaeru.com" ":443" "GET / HTTP/1.1" 301 61 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 196.52.84.16 - - [08/Jan/2020:06:10:16 +0900] "www.gamagaeru.com" ":443" "GET / HTTP/1.1" 302 0 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 196.52.84.16 - - [08/Jan/2020:06:10:19 +0900] "gamagaeru.com" ":443" "GET /shop/ HTTP/1.1" 301 66 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 196.52.84.16 - - [08/Jan/2020:06:10:20 +0900] "www.gamagaeru.com" ":443" "GET /shop/ HTTP/1.1" 404 196 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 196.52.84.16 - - [08/Jan/2020:06:10:21 +0900] "gamagaeru.com" ":443" "GET /store/ HTTP/1.1" 301 67 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 196.52.84.16 - - [08/Jan/2020:06:10:22 +0900] "www.gamagaeru.com" ":443" "GET /store/ HTTP/1.1" 404 196 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 196.52.84.16 - - [08/Jan/2020:06:10:23 +0900] "gamagaeru.com" ":443" "GET /magento/ HTTP/1.1" 301 69 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 196.52.84.16 - - [08/Jan/2020:06:10:24 +0900] "www.gamagaeru.com" ":443" "GET /magento/ HTTP/1.1" 404 196 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 196.52.84.16 - - [08/Jan/2020:06:10:25 +0900] "gamagaeru.com" ":443" "GET /magento2/ HTTP/1.1" 301 70 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 196.52.84.16 - - [08/Jan/2020:06:10:27 +0900] "www.gamagaeru.com" ":443" "GET /magento2/ HTTP/1.1" 404 196 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" ``` ```jsonld= [ { addr: '::ffff:192.0.2.27', unixtime: 1580718039, times: 1 }, { addr: '2001:db8:dead:beef:573:196:1791:1605', unixtime: 1580717973, times: 7 } ] ``` ```jsonld= [ { addr: '::ffff:192.0.2.27', unixtime: 1580718150 }, { addr: '2001:db8:dead:beef:573:196:1791:1605', unixtime: 1580718165 } ] ``` ```javascript= // 一定間隔で画像データ取得 setInterval(function(){ //指定した間隔(ミリ秒)で無限ループ fs.readFile(config.path, function(err,data){ imgdata = data; // 取得した画像データをメモリで保持 }); },200); //ミリ秒 // リクエスト処理 https.createServer(options, function(req, res){ res.writeHead(200, {'Content-Type' : 'image/jpeg'}); res.end(imgdata); // 保持している画像データで応答 }).listen(config.port); ``` ``` process.on('uncaughtException', function(err) { //avoid exitting var etime = moment().format("YYYY-MM-DD HH:mm:ss "); fs.appendFile('./log/error.log', etime + '\r\n' + err + '\r\n'); }); ``` ``` ::ffff:192.0.2.21 - [2020/02/04:03:27:29(9H)] "GET /170417/Dist/images/chap0501.png HTTP/1.1" 404 - "https://www61.example.com:3443/rule.html?hoge=fuga" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" 2001:db8:dead:beef:573:196:1791:1605 user [2020/02/04:03:30:42(9H)] "GET /hoge.txt?p=fug HTTP/1.1" 200 7 "-" "curl/7.58.0" [2020/02/04:04:04:31(9H)] 2001:db8:dead:beef:573:196:1791:1605 Add [2020/02/04:04:04:33(9H)] ::ffff:192.0.2.21 Blocked ``` ## apachebench ### apache ``` This is ApacheBench, Version 2.3 <$Revision: 1807734 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www61.gamagaeru.com (be patient) Server Software: Apache/2.4.41 Server Hostname: www61.gamagaeru.com Server Port: 443 SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES256-GCM-SHA384,2048,256 TLS Server Name: www61.gamagaeru.com Document Path: /ramdsk/camera.jpg Document Length: 46158 bytes Concurrency Level: 100 Time taken for tests: 2529.370 seconds Complete requests: 100000 Failed requests: 50000 (Connect: 0, Receive: 0, Length: 50000, Exceptions: 0) Keep-Alive requests: 50000 Total transferred: 2324412450 bytes HTML transferred: 2309948000 bytes Requests per second: 39.54 [#/sec] (mean) Time per request: 2529.370 [ms] (mean) Time per request: 25.294 [ms] (mean, across all concurrent requests) Transfer rate: 897.43 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 23 184.0 8 7449 Processing: 0 2504 2503.9 5002 5074 Waiting: 0 1 2.7 1 65 Total: 0 2527 2533.2 5012 12460 Percentage of the requests served within a certain time (ms) 50% 5012 66% 5035 75% 5042 80% 5045 90% 5053 95% 5059 98% 5067 99% 5072 100% 12460 (longest request) ``` ### node ``` This is ApacheBench, Version 2.3 <$Revision: 1807734 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www61.gamagaeru.com (be patient) Server Software: CosyLab Server Hostname: www61.gamagaeru.com Server Port: 3100 SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256,2048,128 TLS Server Name: www61.gamagaeru.com Document Path: /ramdsk/camera.jpg Document Length: 46158 bytes Concurrency Level: 100 Time taken for tests: 478.951 seconds Complete requests: 100000 Failed requests: 0 Keep-Alive requests: 0 Total transferred: 4627600000 bytes HTML transferred: 4615800000 bytes Requests per second: 208.79 [#/sec] (mean) Time per request: 478.951 [ms] (mean) Time per request: 4.790 [ms] (mean, across all concurrent requests) Transfer rate: 9435.49 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 46 462 20.1 456 630 Processing: 2 17 2.6 17 79 Waiting: 1 9 1.8 9 55 Total: 67 479 20.8 474 656 Percentage of the requests served within a certain time (ms) 50% 474 66% 478 75% 483 80% 486 90% 503 95% 521 98% 539 99% 557 100% 656 (longest request) ``` ```javascript= IncomingMessage { (中略) httpVersionMajor: 1, httpVersionMinor: 1, httpVersion: '1.1', complete: false, headers: { host: '[2001:2f8:1024:b3f0:82ee:73ff:feb9:ca64]:3000', connection: 'keep-alive', pragma: 'no-cache', 'cache-control': 'no-cache', dnt: '1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36', accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', referer: 'http://[2001:2f8:1024:b3f0:82ee:73ff:feb9:ca64]:3000/', 'accept-encoding': 'gzip, deflate', 'accept-language': 'ja,en-US;q=0.9,en;q=0.8' cookie: '_ga=GA1.1.475259271.1580449298; _gid=GA1.1.156268885.1580449298' }, (中略) _dumped: false } ```