【サーバー管理入門 第7回】Apacheはもう古い?最強Webサーバー「Nginx」構築とFirewalldの壁

Linux

【サーバー管理入門 第7回】Apacheはもう古い?最強Webサーバー「Nginx」構築とFirewalldの壁

こんにちは!「リナックス先生」です。
前回は、Linuxの心臓部である systemd を学び、自作のプログラムをサービスとして常駐させる方法をマスターしました。
これで「サーバーを動かし続ける」基礎体力はつきました。

コウ君

先生! サービス管理ができるようになったので、いよいよWebサイトを作ってみたいです!
LinuxでWebサーバーといえば「Apache(アパッチ)」ですよね?
昔買った入門書にそう書いてありました!

リナックス先生

その知識、ちょっとだけ古いわね。
もちろんApacheも現役だけど、現代の高速なWebサイトや大規模サービスでは「Nginx(エンジンエックス)」を選ぶのがプロの定石よ。
今回は、なぜNginxが最強なのかという理論から、実際に世界中にページを公開するためのファイアウォール設定まで、Webサーバー構築の全てを教えるわ!

第7回となる今回は、サーバー構築のハイライト、Webサーバー(Nginx)の導入です。
しかし、ソフトを入れるだけでは外部からアクセスできません。Linuxを守る「ファイアウォール (firewalld)」の穴あけ作業もセットで学ぶ必要があります。
ここを突破すれば、あなたのサーバーはいよいよ「世界」と繋がります。

本講座のカリキュラム

  1. サーバー管理入門:RHEL系OSの選定理由とローカル仮想環境の構築
  2. 初期設定とセキュリティの要:SSH鍵認証、禁止設定、ユーザー管理の鉄則
  3. パッケージ管理の裏側:dnf/rpmの仕組みとリポジトリの依存関係解決
  4. ネットワーク設定の極意:nmcli、IPアドレス設計、DNSリゾルバの設定
  5. ストレージ管理とファイルシステム:LVMの概念、ディスク拡張、fstabの罠
  6. プロセスとサービス管理:systemd (systemctl) の仕組みとUnit定義ファイルの作成
  7. 【今回】Webサーバー構築(Nginx):ハイパフォーマンスWebサーバーの導入と設定最適化
  8. データベース構築(MariaDB):インストール、初期セキュリティ、バックアップの基礎
  9. ログ管理とトラブルシュート:rsyslog、journalctl、ログローテートの設計
  10. 自動化の第一歩:Cronによる定期実行と管理用シェルスクリプトの作成
  11. バックアップと障害復旧:tar/rsyncによるデータ保全とリカバリ手順
  12. 監視と運用設計:サーバーのリソース監視、死活監視、そしてプロの運用論

1. Apache vs Nginx:なぜ今Nginxなのか?

Webサーバーソフトウェアには二大巨頭が存在します。
歴史ある「Apache HTTP Server」と、新世代の「Nginx」です。
なぜ今、多くの企業がNginxを採用するのでしょうか? その理由は「アーキテクチャ(構造)の違い」にあります。

Apache:プロセス駆動モデル(マルチプロセス)

  • 仕組み: クライアントからの接続(リクエスト)が来るたびに、サーバー内部で「対応スタッフ(プロセス)」を新しく雇って対応させる方式です。
  • 弱点: アクセスが集中すると、スタッフを雇うコスト(メモリ消費)でサーバーがパンクしてしまいます。これを「C10K問題(クライアント1万台問題)」と呼びます。
  • 強み: PHPなどの動的プログラムを自身の中に組み込んで処理できるため、設定が柔軟(.htaccessが使えるなど)です。

Nginx:イベント駆動モデル(ノンブロッキングI/O)

  • 仕組み: 少数の「スーパーエリートスタッフ」が、1人で何千ものリクエストを非同期でさばく方式です。「注文だけ聞いて厨房に回す」ウェイターのような動きをします。
  • 強み: 圧倒的にメモリ消費が少なく、大量の同時アクセスに強いです。静的ファイル(画像やHTML)の配信速度はApacheを凌駕します。
  • 弱点: PHPなどを自分の中で処理できないため、バックエンドのプログラム(PHP-FPMなど)と連携させる必要があります。

💡 プロの選定基準

「WordPressを動かしたい」という場合でも、現在は Nginx(Webサーバー)+ PHP-FPM(APサーバー) という構成が主流です。
本講座でも、このモダンな構成を目指してNginxを採用します。

2. Nginxのインストールと起動

それでは、RHEL 9 / AlmaLinux 9 にNginxをインストールしましょう。
パッケージ管理の回で学んだ dnf を使います。

Step 1: インストール

[root@server01 ~]# dnf install nginx -y

依存関係も含めて数秒で完了するはずです。

Step 2: バージョン確認

[root@server01 ~]# nginx -v
nginx version: nginx/1.20.1

Step 3: 起動と自動起動設定

systemdの回で学んだ systemctl を使います。
「今すぐ起動」かつ「次回から自動起動」にするオプション --now を使いましょう。

[root@server01 ~]# systemctl enable --now nginx
Created symlink ...

Step 4: ステータス確認

[root@server01 ~]# systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded ...
   Active: active (running) ...

緑色で active (running) となっていれば、Webサーバーは元気に動いています。

3. 「繋がらない!」最大の壁、Firewalldの設定

さて、サーバー内部ではNginxが動いていますが、まだPCのブラウザからアクセスしてもページは表示されません。
これは、Linuxが持つ強力な防壁「firewalld」が、外部からの通信を遮断しているからです。

サーバー構築初心者のトラブルNo.1がこの「ファイアウォールの開け忘れ」です。

firewalld の概念「ゾーン (Zone)」

firewalldは「場所」によってセキュリティレベルを変える「ゾーン」という考え方を持ちます。
デフォルトでは public ゾーンが適用されており、ここでは「SSH以外の通信はすべて拒否」という厳しい設定になっています。

現在の設定を確認

[root@server01 ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3
  sources: 
  services: cockpit dhcpv6-client ssh  <-- httpがない!
  ports: 
  protocols: 
  masquerade: no

services の欄に ssh はありますが、Web用の http (ポート80) や https (ポート443) がありません。
これでは門前払いです。

通信を許可する(穴を開ける)

HTTPとHTTPSの通信を許可します。
重要なのは --permanent オプションをつけることです。これがないと、再起動すると設定が消えてしまいます。

# HTTP (80番) を許可
[root@server01 ~]# firewall-cmd --add-service=http --permanent

# HTTPS (443番) を許可
[root@server01 ~]# firewall-cmd --add-service=https --permanent

# 設定を反映(リロード)
[root@server01 ~]# firewall-cmd --reload

もう一度 firewall-cmd --list-all を打ち、services: cockpit dhcpv6-client http https ssh となっていれば成功です。

4. ブラウザからの接続確認

ここまで設定できたら、あなたのPC(Windows/Mac)のブラウザを開き、アドレスバーにサーバーのIPアドレスを入力してください。

例: http://192.168.1.200/ (※HTTPSではなくHTTPです)

🎉 成功の証

「Welcome to nginx on AlmaLinux!」
というシンプルな画面が表示されましたか?
これが表示されれば、あなたのサーバーは正常にWebサーバーとして機能しています!

5. Nginx設定ファイルの解剖学

「Welcomeページ」はあくまでテスト用です。
自分の作ったHTMLを表示させるために、設定ファイルがどうなっているかを見てみましょう。

Nginxのメイン設定ファイルは /etc/nginx/nginx.conf です。

[root@server01 ~]# cat /etc/nginx/nginx.conf

ファイルの中身は { } で囲まれたブロック構造になっています。
重要な部分だけ抜粋して解説します。

user nginx;              # 実行ユーザー
worker_processes auto;   # CPUコア数に合わせてプロセス数を自動調整

http {
    include       /etc/nginx/mime.types;
    
    # ログの出力先
    access_log  /var/log/nginx/access.log  main;
    error_log   /var/log/nginx/error.log;

    # 設定ファイルの分割読み込み(ここが重要!)
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80;
        server_name  _;
        root         /usr/share/nginx/html;

        # ... (以下略)
    }
}

プロの流儀:設定ファイルは「conf.d」で管理せよ

nginx.conf の中にはデフォルトの server { ... } ブロックが書かれていますが、実務では「メインの設定ファイルは極力汚さない」のがマナーです。

include /etc/nginx/conf.d/*.conf; という行に注目してください。
これは「conf.d ディレクトリの中にある .conf ファイルを全部ここに読み込むよ」という意味です。

つまり、新しいWebサイトを追加するときは、nginx.conf を編集するのではなく、/etc/nginx/conf.d/mysite.conf のようなファイルを新規作成して管理するのがスマートな方法です。

6. 実践:オリジナルページの公開

デフォルトの設定では、ドキュメントルート(Webサイトのファイル置き場)は /usr/share/nginx/html になっています。
ここの index.html を書き換えて、オリジナルのトップページを作ってみましょう。

HTMLファイルの編集

元のファイルをバックアップしてから編集します。

[root@server01 ~]# mv /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.bak
[root@server01 ~]# vi /usr/share/nginx/html/index.html

index.html の中身(例):

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>My First Server</title>
</head>
<body>
    <h1>こんにちは!Nginxサーバーへようこそ!</h1>
    <p>これは私が一から構築したLinuxサーバーです。</p>
</body>
</html>

編集して保存したら、ブラウザをリロード(再読み込み)してください。
画面の内容が変わりましたか?
Nginxは静的ファイルであれば、設定の再読み込み(reload)をしなくても、ファイルを書き換えた瞬間に反映されます。

7. トラブルシューティング:403 Forbiddenが出る場合

もし「403 Forbidden(閲覧禁止)」というエラーが出た場合、疑うべきは「パーミッション」「SELinux」です。

権限(パーミッション)の確認

Nginxの実行ユーザー(通常は nginx ユーザー)が、そのファイルを読み取れる必要があります。
ファイルは 644、ディレクトリは 755 が基本です。

chmod 755 /usr/share/nginx/html
chmod 644 /usr/share/nginx/html/index.html

SELinuxの影響

RHEL系特有の強力なセキュリティ機能「SELinux」が有効になっていると、指定外のディレクトリ(例えば /home/user/www など)にHTMLを置いてもブロックされます。
初心者のうちは、デフォルトの /usr/share/nginx/html を使うのが無難です。
もし別の場所に置きたい場合は、SELinuxのコンテキスト設定が必要になりますが、それはまた別の機会に解説します。

次回予告:データベースとの連携

今回は、世界最速クラスのWebサーバー「Nginx」を構築し、Webページを表示させるところまで到達しました。
しかし、今のままではただの「HTMLを表示するだけの場所」です。
ユーザー登録機能や掲示板、WordPressのような動的なサイトを作るには、データを保存する「データベース」が必要です。

次回は、MySQLの完全互換であり、オープンソースデータベースの標準「MariaDB」の構築を行います。
SQLを使ったデータの操作や、初期設定でやっておくべきセキュリティ対策など、バックエンドエンジニアへの第一歩を踏み出しましょう!

リナックス先生

Webサーバーの構築、楽しかったでしょ?
自分の作ったファイルがブラウザで見れると、一気に「サーバー管理者」の実感が湧いてくるものよ。
でも、ローカル環境(VirtualBox)だと、友達にURLを送って自慢することができないのよね……。

世界中の人に自分のWebサイトを見てもらいたいなら、外部からアクセス可能な「VPS(仮想専用サーバー)」を使うのが一番の近道です。
VirtualBoxで練習した内容は、VPSでも全く同じように使えます。
月額数百円から始められて、WordPressの構築もワンクリックでできる推奨VPSを以下に紹介しておきます。

▼スクリプトの実験場に最適!推奨VPS

【2026年最新】Linuxサーバー構築におすすめのVPS比較3選!現役エンジニアが速度とコスパで厳選
Linuxの勉強、まだ「自分のPC」でやって消耗していませんか?「Linuxを覚えたいけど、環境構築でエラーが出て先に進めない…」「VirtualBoxを入れたらパソコンが重くなった…」これは、Linux学習を始める9割の人がぶつかる壁です...

コメント