AWS EC2のエラスティックロードバランサーをクラシックから付け替えているのだけど、アプリケーションロードバランサーにしたら、ヘルスチェックのリクエストが変わったみたいで、Webアプリ側のチェックで応答が悪くヘルスチェックに苦労した。
というわけで、ヘルスチェックのリクエストのヘッダーを見ましょう。
そのために、小さな Webサーバーをセットします、まあ、WEBrick でいいよね。小さな Webサーバは前にもいくつか話題にしています、時間の掛る Webサーバ - hs9587’s diary TLS1.2 サーバ - hs9587’s diary "小さい"Rackアプリケーション - hs9587’s diary。
というわけで、このくらいかな
ruby -r webrick -e "WEBrick::HTTPServer.new(DocumentRoot: %q[./], Port: 8080, RequestCallback: Proc.new{|req,| req.raw_header.join.+(%Q[\n]).display }).start"
実行して、同じマシンで「lynx localhost:8080」とかすると、こうい風にリクエストのヘッダーが見えます。
(0)ec2-user@ip-172-31-<何か>[34] ruby -r webrick -e "WEBrick::HTTPServer.new(DocumentRoot: %q[./], Port: 8080, RequestCallback: Proc.new{|req,| req.raw_header.join.+(%Q[\n]).display }).start" [2021-08-14 11:39:58] INFO WEBrick 1.7.0 [2021-08-14 11:39:58] INFO ruby 3.0.1 (2021-04-05) [x86_64-linux] [2021-08-14 11:39:58] INFO WEBrick::HTTPServer#start: pid=29917 port=8080 Host: localhost:8080 Accept: text/html, text/plain, text/css, text/sgml, */*;q=0.01 Accept-Encoding: gzip, bzip2 Accept-Language: en User-Agent: Lynx/2.8.8dev.15 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/1.0.2k-fips 127.0.0.1 - - [14/Aug/2021:11:40:04 JST] "GET / HTTP/1.0" 200 77 - -> /
起動ディレクトリには「Hello world!」とあるだけの index.html を置いときます。
というわけで、ロードバランサーやターゲットグループにこの機を配置します。
Classic Load Balancer より
host: 172.31.<何か>:8080 User-Agent: ELB-HealthChecker/1.0 Accept: */* Connection: keep-alive 172.31.<何か> - - [14/Aug/2021:14:14:53 JST] "GET /index.html HTTP/1.1" 200 77 - -> /index.html
Application Load Balancer の Target groups より
Host: 172.31.<何か>:8080 Connection: close User-Agent: ELB-HealthChecker/2.0 Accept-Encoding: gzip, compressed 172.31.<何か> - - [14/Aug/2021:14:13:53 JST] "GET /index.html HTTP/1.1" 200 77 - -> /index.html
ということで、User-Agent: が 1.0、2.0 とか兎も角、Connection: の値や、Accept: か Accept-Encoding: など、微妙に違っています。
所要のWebアプリでは「[msg "Request Missing an Accept Header"]」と出ていたので、まさにそういう事でした。