Fedora上で複数のウェブサイトをホストするためのNginxとLet’s Encryptの設定:実践的なデプロイメント経験

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

はじめに

現代のウェブ開発の世界では、1つのサーバー上で複数のウェブサイトを管理することは珍しくありません。ステージング環境を必要とする開発者であろうと、クライアントのプロジェクトを管理するフリーランサーであろうと、複数のサービスをホストする必要がある中小企業であろうと、このニーズは非常に一般的です。これには、安定したパフォーマンスと強力なセキュリティへの要求が伴います。今日、HTTPSはもはやオプションではなく、必須の標準となっています。

私は過去2年間、Fedoraをメインの開発マシンとして使用しており、パッケージの更新速度にはかなり満足しています。そのため、シンプルで効果的なウェブサーバー環境をデプロイする必要がある場合、Fedoraが常に私の最初の選択肢です。この記事では、私がNginxをウェブサーバーとして設定し、Let’s Encryptを統合してFedora上で無料のSSL/TLS証明書を提供し、複数のウェブサイトを安全かつ最適にホストする方法を詳しく共有します。

一般的なウェブサーバーのアプローチの比較

ウェブサーバーに関して言えば、常にいくつかの名前が挙げられます。Apache、Nginx、そして最近ではCaddyです。各ツールには独自の設計思想と利点があり、それぞれの使用ニーズに適しています。

  • Apache HTTP Server + Certbot: これは古典的な組み合わせです。Apacheは最も古く、最も人気のあるウェブサーバーの1つであり、巨大なモジュールエコシステムを持っています。Certbotを介してLet’s EncryptからのSSL証明書を統合することも非常に簡単です。
  • Nginx + Certbot: Nginxは後発ですが、高性能なアーキテクチャのおかげで急速に市場シェアを獲得しました。特に静的ファイルの提供、ロードバランシング、リバースプロキシにおいて優れています。NginxとCertbotを組み合わせてHTTPSを実現することも標準的な手順となっています。
  • Caddy Server: Caddyは比較的新しいウェブサーバーですが、非常に強力で、シンプルさとセキュリティを最優先に設計されています。Caddyの最も顕著な特徴は、ドメインを設定すると同時に、Let’s EncryptまたはZeroSSLからSSL/TLS証明書を自動的に発行および更新する機能です。これにより、Certbotの個別の設定手順は不要になります。

長所と短所の分析

  • Apache HTTP Server

    • 長所: 非常に安定しており、大規模なサポートコミュニティ、豊富なドキュメント、多彩なモジュール、.htaccessファイルによる柔軟な設定が可能です。
    • 短所: 特に大量の同時接続を処理する場合、Nginxよりも多くのリソースを消費する可能性があります。プロセスベースのアーキテクチャは、Nginxのイベントドリブンアーキテクチャほど最適ではない場合があります。
  • Nginx

    • 長所: 高性能で軽量であり、静的ファイルの提供やリバースプロキシとして非常に効率的です。Apacheよりもシステムリソースの使用量が少ないです。イベントドリブンアーキテクチャにより、大量の同時接続をより良く処理できます。
    • 短所: 特に動的なウェブアプリケーションを処理する場合(Nginxは通常PHP-FPM、Gunicorn、uWSGIなどと組み合わせて使用されますが)、初心者にとってはApacheよりも設定が少し複雑になる可能性があります。
  • Caddy Server

    • 長所: 設定が非常にシンプルで、HTTPSが自動化されており、小規模なプロジェクトや時間を最大限に節約したい場合に使いやすいです。
    • 短所: コミュニティとモジュールエコシステムはApacheやNginxほど大きくありません。複雑なエンタープライズ環境に必要な高度な機能や柔軟性が不足している場合があります。

適切な選択:Fedora上のNginx

検討の結果、私はFedora上のNginxが、良好なパフォーマンスと高いセキュリティを必要とし、かつ複雑すぎない中小規模のウェブサイトをホストするニーズにとって最適な組み合わせであると判断しました。

迅速なパッケージ更新速度を持つFedoraは、常に最新バージョンのNginxとCertbotを利用できることを保証し、パフォーマンスとセキュリティの改善を活用できます。Nginxは、比較的トラフィックの多いウェブサイトに対応できるほど強力であり、設定は最初Apacheと少し異なりますが、慣れてしまえば非常に論理的で簡潔です。

詳細なデプロイメントガイド

1. Fedoraシステムの準備

まず、Fedoraシステムが更新され、必要なツールがインストールされていることを確認してください。

システムの更新:

sudo dnf update -y
sudo dnf upgrade -y

Nginxのインストール:

sudo dnf install nginx -y

Nginxの有効化と起動:

sudo systemctl enable --now nginx

Nginxのステータスを確認するには:

sudo systemctl status nginx

FirewallDの設定: Nginxが動作できるように、HTTP (80) と HTTPS (443) のポートを開放します。

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

SELinuxについて: FedoraはデフォルトでSELinuxが有効になっており、これは非常に重要なセキュリティ機能です。ほとんどの場合、Fedora上のNginxには適切なSELinuxポリシーが設定されています。ただし、ファイルアクセスに関連するエラーが発生した場合は、再度確認してください。SELinuxの設定に関する記事を以前に書いたことがありますので、カスタマイズが必要な場合はそちらを参照してください。

2. 複数のウェブサイトのためのNginx設定 (HTTP)

Nginxは、各ウェブサイトの設定を定義するために「サーバーブロック」(Apacheのバーチャルホストに似ています)の概念を使用します。各ウェブサイト用に個別のディレクトリと対応する設定ファイルを作成します。

ウェブサイトのルートディレクトリの作成:

sudo mkdir -p /var/www/site1.com/html
sudo mkdir -p /var/www/site2.com/html

適切な権限を付与します(例: Nginxユーザーが読み取りと実行を可能にし、あなたのユーザーが書き込みを可能にする):

sudo chown -R $USER:$USER /var/www/site1.com/html
sudo chown -R $USER:$USER /var/www/site2.com/html
sudo chmod -R 755 /var/www

テストのために、各ディレクトリにシンプルなindex.htmlファイルを作成します。

echo "<h1>サイト1へようこそ!</h1>" | sudo tee /var/www/site1.com/html/index.html
echo "<h1>サイト2へようこそ!</h1>" | sudo tee /var/www/site2.com/html/index.html

各ウェブサイトのNginx設定ファイルの作成:
/etc/nginx/conf.d/ディレクトリに個別の.confファイルを作成します。Nginxはこれらのファイルを自動的にロードします。

ファイル /etc/nginx/conf.d/site1.com.conf:

server {
    listen 80;
    listen [::]:80;
    server_name site1.com www.site1.com;
    root /var/www/site1.com/html;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}

ファイル /etc/nginx/conf.d/site2.com.conf:

server {
    listen 80;
    listen [::]:80;
    server_name site2.com www.site2.com;
    root /var/www/site2.com/html;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}

Nginxの確認と再起動:

sudo nginx -t
sudo systemctl reload nginx

この時点で、http://site1.comhttp://site2.com にアクセスすると(DNSがサーバーのIPを指しているか、ローカルマシンの/etc/hostsを設定していることを確認してください)、各ウェブサイトのコンテンツが表示されます。

3. CertbotのインストールとLet’s Encrypt証明書の取得

Certbotは、証明書の発行と更新を自動化するためのLet’s Encrypt公式ツールです。FedoraはNginxと統合されたCertbotパッケージを提供しており、非常に便利です。

CertbotとNginxプラグインのインストール:

sudo dnf install certbot python3-certbot-nginx -y

Certbotを実行して証明書を取得し設定する:

sudo certbot --nginx -d site1.com -d www.site1.com -d site2.com -d www.site2.com

Certbotはいくつかの情報を尋ねてきます。

  • 緊急通知と更新を受け取るためのメールアドレス。
  • サービス利用規約への同意。
  • EFF (Electronic Frontier Foundation) とメールアドレスを共有するかどうか (オプション)。
  • 最も重要なのは、HTTPからHTTPSへの自動リダイレクトを希望するかどうかをCertbotが尋ねてくることです。すべてのトラフィックが保護されるように、このオプションを選択することをお勧めします。

完了後、CertbotはHTTPSとSSLに必要なディレクティブを追加するために、Nginxの設定ファイルを自動的に変更します。

4. HTTPSを使用したNginx設定の最適化

Certbotは通常、HTTPSの自動設定を非常にうまく行います。Certbotを実行した後、/etc/nginx/conf.d/内の設定ファイルを再確認できます。これらは次のようになります(site1.com.confの例)。

server {
    listen 80;
    listen [::]:80;
    server_name site1.com www.site1.com;
    # HTTPからHTTPSへリダイレクト
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name site1.com www.site1.com;

    root /var/www/site1.com/html;
    index index.html index.htm;

    ssl_certificate /etc/letsencrypt/live/site1.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/site1.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
        try_files $uri $uri/ =404;
    }
}

ポート443 (HTTPS) 用の新しいserverブロックが、Let’s Encryptの証明書ファイルを参照するssl_certificatessl_certificate_key行とともに作成されていることがわかります。さらに、ポート80 (HTTP) 用のserverブロックはHTTPSにリダイレクトするように設定されています。

Nginxの確認と再起動を再度行う:

sudo nginx -t
sudo systemctl reload nginx

5. 証明書の自動更新

Let’s Encryptの証明書は90日間しか有効ではありません。ウェブサイトのダウンタイムを避けるため、自動更新を設定する必要があります。Certbotはこれを実行するためにsystemdタイマーを自動的に作成します。

このタイマーが設定されているか確認するには:

systemctl list-timers | grep certbot

certbot.timerのような結果が表示されれば、正常に設定されています。Certbotは定期的に(通常は1日に2回)certbot renewコマンドを自動的に実行します。このコマンドは、期限切れ間近の証明書をチェックし、必要に応じて更新します。

実際に証明書を変更せずに更新プロセスをテスト実行するには、次のコマンドを使用します。

sudo certbot renew --dry-run

6. 確認と検証

設定が完了したら、確認作業が非常に重要です。

  • ウェブサイトへのアクセス: ブラウザを開き、https://site1.comhttps://site2.comにアクセスします。緑色の南京錠アイコンが表示され、接続が保護されていることを確認できます。
  • SSL品質のテスト: SSL Labs Server Testツールを使用します。ドメイン名を入力すると、このツールがSSL設定を詳細に分析し、スコア(すべてが正しく設定されていれば通常はAまたはA+)を提供します。

まとめ

Fedora上で複数のウェブサイトをホストするためのNginxとLet’s Encryptの設定は、これまで以上に簡単かつ効率的になりました。私の個人的な経験から、この組み合わせは、Nginxのパフォーマンス上の利点とFedoraの迅速な更新機能を活用し、強力で安全かつ管理しやすいウェブサーバープラットフォームを提供します。この記事を通じて、あなたが強固なFedoraプラットフォーム上に自身のウェブサイトをデプロイするための十分な知識と自信を得られたことを願っています。

Share: