「で接続が拒否されました。 次をお試しください」の「次」

目立つ見出しになってそうでやだなぁ。非常にちんまい話しかしないので、ちゃんとした情報を求めて運悪くここを見つけてしまった人は、たぶん読まずに離脱してもらっていいと思う。

ブラウザで

このサイトにアクセスできませんsome.service.domain で接続が拒否されました。
次をお試しください

接続を確認する
プロキシとファイアウォールを確認する
ERR_CONNECTION_REFUSED

をうけたまわってしまった場合の初動の話だけれど、ERR_CONNECTION_REFUSED だけで十分わかるだろ、てことではなくて、別のわかりやすい状況把握をしたいかなぁと。無論特定サイトだけの問題でないなら「接続を確認する/プロキシとファイアウォールを確認する」こそが本物の「次」だが、今の話はそうではなくて。いつもは ping するくらいしか思いつかなかったのね。これでも「死んでるのがサイトなのかサービスなのか」の切り分けにはなるけれど、手札がもっと欲しいぞと。

まずは、(今や wsl のおかげで unix ものでも簡単に使えるので) mtr。知らんかった、こんな便利なものが出来てたのか。ping + traceroute で得られるものを、top のような UI で提供する。これはいい。が、これだと「port 80 のサービスとして死んでる」ことがどうもわからないような気がする、つまり「ping だけでわかったこと」からあまり進展しない。

http なのだからということであれば、「HTTP HEAD してみりゃいいじゃんね」。これを毎度思いつけないのだよね。これをするならこんな具合ね:

 1 [hhs@lc: ~]$ wget -S --spider --debug http://some.service.domain/some/service/login
 2 DEBUG output created by Wget 1.20.3 on linux-gnu.
 3 
 4 Reading HSTS entries from ~/.wget-hsts
 5 URI encoding = ‘UTF-8’
 6 Converted file name 'login' (UTF-8) -> 'login' (UTF-8)
 7 Spider mode enabled. Check if remote file exists.
 8 --2023-03-10 00:51:49--  http://some.service.domain/some/service/login
 9 Connecting to some.service.domain:80... Closed fd 3
10 failed: Connection refused.
11 Releasing 0x000055de93fa4170 (new refcount 0).
12 Deleting unused 0x000055de93fa4170.
13 [hhs@lc: ~]$ curl --head http://some.service.domain/some/service/login --trace -
14 == Info:   Trying some.service.domain:80...
15 == Info: TCP_NODELAY set
16 == Info: connect to some.service.domain port 80 failed: Connection refused
17 == Info: Failed to connect to some.service.domain port 80: Connection refused
18 == Info: Closing connection 0
19 curl: (7) Failed to connect to some.service.domain port 80: Connection refused
20 [hhs@lc: ~]$

「ping してみたうえでさらにこれ」というものではなくて、やるなら最初にやってみたいこと、ということだよ念のため。さらにいえば、ブラウザで開いてみる、すらもやらずにこれを試みれるとなお良い。だって、ブラウザで ERR_CONNECTION_REFUSED がわかってるんだから、このコマンドラインを叩いてみるのは、ブラウザで起こっていることを別のコマンドでそのまま再現させてるだけということに過ぎないわけで。最も考えられるシナリオは、selenium などで機械的に操作していてなんらかエラーを喰らった場合の原因解析時。それ以外ではこれをする意味はあまりなさげね。

「HTTP HEAD してみりゃいいじゃんね」を思い出せるかどうかと、HTTP HEAD を叩くためのコマンドライン構成とそれに冗長モード。人によって、やってる仕事によっては、下手すりゃ一年に一回くらいしかお世話にならないこともあるほどのものなので、こうやってメモしておかないとこんな些細なことであっても、ソラでこのコマンドラインを打ち込むのはなかなか難儀であろうと思うよ。