Linux 講座 / Nginx ウェブサーバーのインストールから HTTP・HTTPS 公開まで

Nginxのウェブサービスを公開するには、ウェブサーバーのインストールや設定の確認だけでなく、正しいファイルパス・待ち受けポート・ファイアウォール・DNS・TLS証明書も準備する必要があります。まずローカルのHTTPでページを検証し、その後リモート接続とドメイン、最後にHTTPSを段階的に確認してください。

接続失敗を診断する際はネットワーク層別のチェックを、外部公開前にはファイアウォールとアカウント保護も合わせて適用してください。パッケージリポジトリによってNginxや証明書ツールのバージョンが異なるため、インストールされているバージョンと該当するディストリビューションの案内を基準に設定します。

システム設定実習の基準は Ubuntu 26.04 LTS と Rocky Linux 9 系の一般インストール VM です。コンテナ・WSL・別のリリースでは、サービスやパッケージの構成が異なる場合があります。仮想マシン実習環境の作成で、コンソールの復旧とバージョン確認を最初に準備してください。

準備するサーバー・ドメイン・接続条件

実習用のUbuntuまたはRocky Linuxサーバー、sudoアカウントとコンソール復旧手段が必要です。linux-course.testはローカル試験用の名前であり、公開DNSに登録する名前ではありません。公開段階では自分が管理する実際のドメインに変更し、NAT環境ではポート転送・ルーターの外部アドレス・通信プロバイダーの制限も確認します。既存の80・443ポートを他のサービスが使用していないかまず確認します。

sudo ss -lntp
cat /etc/os-release

ディストリビューションに合わせてNginxをインストールする

下の最初のブロックはUbuntu用、2番目はRocky Linux用です。提案されたパッケージの変更を確認した後、インストールして必要なリポジトリ方針に従ってください。基本ページがあっても他のサイト設定は削除せず、別のサーバーブロックを追加します。

sudo apt update
sudo apt install nginx curl
sudo systemctl enable --now nginx
sudo dnf install nginx curl
sudo systemctl enable --now nginx

別のドキュメントルートと全体設定を作成する

下の2つのパスに既存の実習資料がある場合は、まずバックアップして他の名前を選択します。静的HTMLなので、配布版共通パス/var/www/linux-courseに読み取り可能なファイルを置きます。nginx.confがconf.d以下の.confファイルをインクルードする一般的なパッケージ構成を前提としており、異なる場合は実際のインクルード構造を先に確認する必要があります。

sudo install -d -m 755 /var/www/linux-course
printf '<!doctype html><html lang="en"><meta charset="utf-8"><title>Linux course</title><h1>Linux course server works</h1></html>\n' | sudo tee /var/www/linux-course/index.html
sudo chmod 644 /var/www/linux-course/index.html
sudo tee /etc/nginx/conf.d/linux-course.conf > /dev/null <<'EOF'
server {
    listen 80;
    server_name linux-course.test;
    root /var/www/linux-course;
    index index.html;
    location / {
        try_files $uri $uri/ =404;
    }
}
EOF
sudo nginx -t

本文のh1はウェブサーバーが提供する別の実習HTMLのタイトルであり、このWordPress記事のタイトルタグではありません。nginx -tが成功した場合にのみ下のreloadを実行してください。エラーが出た場合は、メッセージが指摘したファイル・行を修正して再確認し、既存サービスが稼働している間に誤った設定で再起動しないでください。

sudo systemctl reload nginx
curl -i --resolve linux-course.test:80:127.0.0.1 http://linux-course.test/

HTTP 200とLinux course server worksを確認します。--resolveは該当リクエストにのみドメインとアドレスの対応を指定するため、システムDNSは変更しません。基本Nginxページが表示される場合は、Host名とserver_name、実際に読み込まれた設定を確認してください。

ファイル権限・SELinuxとネットワーク公開を区別する

Rocky LinuxでSELinuxが有効になっている場合、ls -Zd /var/www/linux-courseでラベルを確認し、基本ポリシーパスにはsudo restorecon -Rv /var/www/linux-courseを適用できます。別のパスには恒久的なラベルポリシーが必要な場合があります。HTTP 403を解決しようとしてSELinuxを無効にしたり、全体のパスに777の権限を与えたりしないでください。

ローカルの応答を確認した後、HTTP 80/tcpおよび将来的にはHTTPS 443/tcpを必要な範囲で許可します。UbuntuのUFWではsudo ufw allow 80/tcpのようにルールを追加し、firewalldでは実際のゾーンでhttp・httpsサービスをruntimeで試した後、該当するルールのみをpermanentに保存します。クラウドファイアウォールも確認し、SSHの許可は維持します。

他のコンピューターでcurl -H "Host: linux-course.test" http://実際のサーバーアドレス/で同じページが表示されるか確認します。ローカル成功・リモート失敗の場合はバインディング・ファイアウォール・ルーティング・NATを調査し、403・404・502などのHTTP応答が来た場合はサーバー・パス・アプリケーション層を調査します。

実際のドメインとHTTPSを適用する

  1. 実際のドメインのA・AAAAを意図した公開アドレスに接続します。サーバーがIPv6を提供していない場合は、誤ったAAAAを登録しません。
  2. server_nameを実際のドメインに変更し、nginx -tの後にreloadします。別のネットワークからドメインでHTTP応答を確認します。
  3. 公式 Certbot インストール案内で、使用するオペレーティングシステムと Nginx に合ったインストール方法を選びます。Ubuntu のパッケージ方式では apt install certbot python3-certbot-nginx を使用でき、その他のディストリビューションではまずリポジトリの構成を確認します。
  4. 80・443 へのアクセスと所有ドメインを確認した後、sudo certbot --nginx -d 実際のドメイン で証明書の発行・設定を進めます。
  5. HTTPS 証明書の名前・チェーン・有効期限とリダイレクトを確認し、sudo certbot renew --dry-run で更新のテストを行います。

HTTP-01チャレンジ(HTTP経由のドメイン管理権限確認)が制限されている環境では、DNS-01チャレンジなど他のサポート方式を選択する必要があります。公開 DNS や証明書条件のないローカル演習を完了したからといって、HTTPS 公開まで完了したと判断しないでください。HTTP テスト段階ではパスワードやトークンなどの機密情報を送信しません。

障害確認と演習設定の復旧

systemctl status nginx --no-pager
journalctl -b -u nginx -n 50 --no-pager
sudo nginx -t

問題を確認する際は、実際の error_log のパスとリクエスト時刻も一緒に確認します。実習を削除するには、作成した conf ファイルだけをバックアップ後に削除し、nginx -t が通れば reload します。ドキュメントルート・証明書・DNS・ファイアウォールは実際の使用関係を確認した後、今回作成した項目だけを整理します。既存サイト・共用証明書・SSH ルールを一括削除はしません。

公式ドキュメント