Certbot “problem binding to port 80” の解決方法

サーバー(AWS)に独自ドメインを追加、
そのドメインをSSL化しようとしてました。

そういう時は Let's encrypto を使います。

  • certbotをインストールして実行
  • SSL化したいドメインを入力
  • あとは手順に沿えばSSL化完了

…なんだけど、エラーが出てしまいました。

このCertbotエラーの原因/解決策を残しときます。。

AWSにLet's encrypt導入してみたが失敗…

僕は使用してる環境はAWSです。

そこにRoute53から独自ドメイン購入し、
独自ドメインをEC2に適用するまではOKでした。

ところがLet's encryptoでSSL化しようとした時です。

▼ Certbotの実行時にこんなエラーが出た

Problem binding to port 80 ...?

80番ポートに接続できないみたいです。

原因は80番ポートを別プロセスが使ってたから

とりあえず何が起きてるか調べました。

▼ lsofで80番を使用してるプロセス調査

これらが80番ポートを使用してたみたいです。

それゆえcertbotが80番ポートに接続できません。

 

あとちなみにlsofコマンドについて

▼ lsofはこういう用途に使える

「lsof」コマンドは、「プロトコル」「ホスト名」「IPアドレス」「サービス名」「ポート」などを指定して、プロセスが開いている「ファイル」「ディレクトリ」「ブロックファイル」「キャラクタファイル」「ライブラリ」などを表示する。「ストリーム」「ソケット」の情報も表示可能。

引用元 : https://renoji.com/IT.php?Contents=ShellScript_Bash/Cmd_lsof.html

ポート番号以外にも使えるコマンドです。

特定リソースを開いてるプロセスを特定可能

80番ポートを占有してるプロセスをkill

ということで対象プロセスをkillしました。

▼ こういうコマンド

プロセスキルにはkillコマンドを使いますが、-9 をオプションとして付与すると強制終了させれるみたいです。(どうして9なのかは不明)

あと強制終了するプロセスIDを渡すわけですが、 $(sudo lsof -t -i:80)  から80番ポートを使用してるプロセスIDをまとめて渡してます。

これでプロセスキルが完了しました。

▼ 無事Certbotが実行できた!SSL化も完了

問題なくSSL証明書が取得できました。

もし"problem binding to port 80"が解決しないなら…

もし上記を試しても問題が解決しない場合。

次の可能性とかも考えられますね。

  • 80番ポートが解放されていない
  • プロセスキルが上手くいってない

以上、"problem binding to port 80" の解決策でした。

同じ問題に遭遇してるなら試してみてください。