バランサーのヘルスチェックのリクエストヘッダー

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"]」と出ていたので、まさにそういう事でした。