デバッグプロセスを記憶する — 接続

作成者:カランカラン
💡

質問やフィードバックがありましたら、フォームからお願いします

本文は台湾華語で、ChatGPT で翻訳している記事なので、不確かな部分や間違いがあるかもしれません。ご了承ください

前言

数ヶ月前から、私の Google Chrome で不思議な connection refused のエラーが頻発するようになりました。時々、特定のウェブページが表示されないことがありましたが、他のデバイスでは問題なく表示されました。少し不思議に思いましたが、サーバーの設定の問題かもしれないと思い、特に気にせずそのまま使い続けました。

カスタムドメインの設定

その後、.dev ドメインを購入した際に奇妙なことが起こりました。CNAME を設定して SSL が有効になったことを確認したのですが、Chrome で再読み込みをしても CONNECTION_REFUSED が表示される一方でした。一般的にこの問題にはいくつかの原因が考えられます。まず、サーバー側でポートが開いていないこと、次にファイアウォールの設定です。この二つの設定を確認したところ、どちらも問題ありませんでした。念のため、dig xxx.dev +nostats +nocomments +nocmd を使って CNAME が正しく設定されているか確認しましたが、全く問題ありませんでした。

次に SSL の問題を調べるために、SSL checker を使って SSL の設定が正しいか確認したところ、こちらも問題ありませんでした。

さて、設定が反映されるまでに時間がかかるのかもしれないと思い、10 分待って再チェックしましたが、やはり Chrome では CONNECTION_REFUSED のままでした。その後、スマートフォンで確認したところ、ウェブページには問題なくアクセスできました。

この時点で、コンピュータ内の何か設定が間違っているのではないかと疑い始めました。それで、関連する設定を確認し始め、まず curl blog.kalan.dev を実行してみました。すると、エラーが表示されました:

curl: (7) Failed to connect to blog.kalan.dev port 80: Connection refused

うん、Chrome の結果と curl の結果が同じなので、コンピュータの設定に問題があると確信が深まりました。次に、wget を使って何が起こっているのかを見てみました。

wget https://blog.kalan.dev
--2019-03-18 23:11:46--  https://blog.kalan.dev/
ホスト blog.kalan.dev (blog.kalan.dev) を探しています... 127.0.0.1, 0.0.0.1
blog.kalan.dev (blog.kalan.dev)|127.0.0.1|:443 に接続中... 失敗: Connection refused。
blog.kalan.dev (blog.kalan.dev)|0.0.0.1|:443 に接続中... 失敗: No route to host。

え、ホストが 127.0.0.1 に解決されている?つまり、私がこのドメインを hosts に追加したということですか?私の記憶にはそのようなことは全くありませんでしたが、期待を持って /etc/hosts/private/etc/hosts の二つのファイルを見に行きました。

結果は同じで、私のローカル hosts にドメインは設定されていませんでした。しかし、少なくとも原因は分かりました。ある設定によって blog.kalan.dev127.0.0.1 に設定されてしまったのです。ここまで来ると、何が原因なのか全く分からなくなりました。しかし、無駄に試行錯誤しているうちに、奇妙なことに気づきました。すべての xxx.dev ドメインに同じ状態が発生しており、他のドメインにはこの問題がありませんでした。

この時、私は4年前のことを思い出しました。Ruby On Rails を学ぶために、powder をダウンロードしたことがありました。簡単に説明すると、ウェブサイトにアクセスする際にサーバーを自動で起動してくれるものです。これは非常に便利でしたので、私は嬉々としてインストールしました。

しかし、公式ドキュメントをよく見ると、こちらに次のように書かれていました:

POW_DOMAINS 環境変数は、Pow が DNS クエリや HTTP リクエストを処理するためのトップレベルドメインのカンマ区切りリストを指定します。このリストのデフォルト値は test,dev の二つのドメインであり、Pow はシステムを設定して *.test*.dev を 127.0.0.1 に解決し、~/.pow 内のアプリを .test および .dev ドメインで提供します。

ああ、なるほど、私の IP アドレスが 127.0.0.1 に割り当てられてしまったのですね。そして、コンピュータがポート 443 を開いていなかったために CONNECTION_REFUSED が発生していたのです。なので、見られなかったウェブページは、もしかしたら .dev ドメインを使っていたのかもしれません。

いくつかのことを記録しておきましょう:

  • CONNECTION_REFUSED に遭遇した時には、直接 wget でホストの接続が正しいか確認すること。
  • あるいは、curl --ipv4 -v "your.site.com" を使ってホストの接続を確認すること。

この記事が役に立ったと思ったら、下のリンクからコーヒーを奢ってくれると嬉しいです ☕ 私の普通の一日が輝かしいものになります ✨

Buy me a coffee