Fedora ServerにCaddyをインストール:5分で自動HTTPSとリバースプロキシを設定

Fedora tutorial - IT technology blog
Fedora tutorial - IT technology blog

膨大な設定ファイルを持つNginxの管理、Certbotの追加インストール、3ヶ月ごとのSSL更新への不安。これらは非常に手間がかかる作業です。Caddyは開発者にとっての救世主として登場しました。Fedoraをメインマシンとして2年以上愛用している私にとって、Caddyはこのエコシステムに完璧にマッチするピースだと感じています。

なぜCaddyを使うとNginxが「面倒」に感じてしまうのか?

従来のプロセスは、Nginxのインストール、仮想ホストの設定、Certbotの導入、そしてSSL自動更新のためのCronjob設定といった、あまりに多くの仲介ステップが必要でした.Caddyはこのゲームチェンジャーです。ドメイン名を指定するだけで、Let’s EncryptやZeroSSLからのSSL証明書の発行と更新を100%自動化します。

Nginxで50行書く代わりに、Caddyfileに3行書くだけでNode.jsやPythonアプリケーションのリバースプロキシとして動作します.Fedoraのようなモダンさを重視するOSにおいて、Caddyの使用はシステムを軽量かつメンテナンスしやすく保つのに最適です。

Go言語とFedoraの相乗効果

CaddyはGo言語で記述されており、優れた並列処理性能と高いメモリ安全性を備えています。Fedoraは頻繁に最新パッケージを更新するため、HTTP/3のデフォルトサポートといったCaddyの最新機能に他のディストリビューションよりも早くアクセスできます。

ただし、FedoraにはfirewalldSELinuxという2つの特有のセキュリティ層があります。これらが原因で、Webサーバーをインストールしても外部からアクセスできないという問題がよく発生します。これについては以下で対処していきます。

DNFを使用したCaddyのインストール手順

Fedoraで最も安定した方法は、パッケージマネージャーDNFを使用することです。CaddyはFedora 33以降、公式リポジトリで提供されています。

# システムのアップデート
sudo dnf update -y

# Caddyのインストール
sudo dnf install caddy -y

インストールが成功したか、バージョンを素早く確認します:

caddy version

ファイアウォールのポート開放:不可欠なステップ

Fedora Serverはデフォルトで接続ポートを厳格に閉じています。Webサイトを外部に公開するには、ポート80(HTTP)と443(HTTPS)を開放する必要があります。この手順を忘れると、ブラウザに「Connection Timed Out(タイムアウト)」エラーが表示されます。

# Webトラフィックの通過を許可
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https

# 変更を即座に適用
sudo firewall-cmd --reload

Caddyfileの設定:シンプルで効果的

メインの設定ファイルは /etc/caddy/Caddyfile にあります。例えば、ポート3000で動作しているアプリケーションがあり、そこにドメイン yourdomain.com を紐付けたいとします。

ファイルを開き、以下の内容に書き換えてください:

yourdomain.com {
    reverse_proxy localhost:3000
}

Caddyは、Let’s Encryptでの認証、SSLの取得、HTTPからHTTPSへのリダイレクト設定、そしてアプリへのトラフィック転送など、すべてを自動で行います。全工程は30秒もかかりません。

SELinuxの壁を乗り越える

アプリケーションが正常に動作しているにもかかわらず「502 Bad Gateway」エラーが発生する場合、SELinuxがCaddyのバックエンドへの接続をブロックしている可能性が高いです。これは、Webプロセスが不正なネットワーク接続を行うのを防ぐためのセキュリティ機構です。

以下のコマンドを実行してCaddyに権限を付与します:

# Webサーバーのネットワーク接続(リバースプロキシ)を許可
sudo setsebool -P httpd_can_network_connect 1

-P フラグを付けることで、サーバーを再起動した後もこの設定が維持されます。これは、定期メンテナンス後に原因不明の「サイト停止」を防ぐための重要なノウハウです。

サービスの管理をスムーズに

Caddyを有効化して、システム起動時に自動で開始されるようにします:

# 起動と自動起動設定
sudo systemctl enable --now caddy

# 動作ステータスの確認
sudo systemctl status caddy

Caddyfile を編集するたびにサービス全体を再起動する必要はありません。既存の接続を中断することなく新しい設定を適用するには、reloadコマンドを使用します:

sudo systemctl reload caddy

トラブルシューティング時のログ確認方法

ドメインがSSLを認識しない場合は、リアルタイムログを確認してください。Fedoraでは、すべてが journalctl を通じて記録されます:

sudo journalctl -u caddy -f

このログを見れば、CaddyがDNSエラー(SSL認証不可)を起こしているのか、あるいはディレクトリ権限によるファイルアクセス拒否が発生しているのかが一目でわかります。

最後に

Fedora ServerでNginxからCaddyに切り替えたことで、管理時間を大幅に節約できるようになりました。Fedoraの安定性とCaddyの利便性を同時に手に入れることができます。もしエラーに遭遇したら、コードを深く修正する前に、必ずFirewalldとSELinuxを確認することを忘れないでください。皆さんのプロジェクトの成功を祈っています!

Share: