🐧 Linux 総合学習プラットフォーム
サーバ構築 ・ 中級

Webサーバの導入(nginx / Apache httpd)

代表的なWebサーバは nginx と Apache httpd の2つです。どちらも dnf install で導入でき、systemctl で起動・自動起動を設定します。導入直後はテストページが表示され、ブラウザや curl で http://localhost にアクセスして応答を確認します。1台に両方入れると 80番ポートを取り合うため、通常はどちらか一方を有効にします。

ブラウザにURLを打ち込むと、世界のどこかのページが目の前に現れる。これは、ブラウザがどこかのWebサーバに接続し、HTMLや画像といったデータを受け取って表示しているからだ。スマートフォンのアプリの多くも、裏では同じ仕組みでサーバからデータを取得している。

この「要求に応えてWebのデータを返す」役割を担うのがWebサーバソフトウェアだ。HTTPというプロトコルを扱うことからHTTPサーバとも呼ばれる。

ブラウザ見たい人WebサーバHTTPサーバこのページがほしい(要求)HTML・画像を返す(応答)要求に応えてWebのデータを返すのがWebサーバの仕事

Linuxはこのサーバ用途で広く使われており、世界のWebサーバの大半がLinuxを含むUNIX系OSの上で動いている。

その「返す側」を自分の手で立てるには何をすればいいのか。Webサーバを立てるという作業は、サービスとしてのHTTPサーバを導入し、起動し、自動起動を設定し、ブラウザから応答が返ることを確かめる、という流れで進む。

💡
ポイントWebサーバは「要求に応えてHTML・画像を返す側」。立てる手順は、導入→起動→自動起動→応答の確認、の4ステップだ。

⚖ 二強をどう選ぶ nginx と Apache httpd

Linuxで使われるWebサーバの代表が Apache httpd と nginx の2つだ。最初に学ぶならどちらがよいか。

Apache はインターネット初期から使われ、設定例やノウハウがネット上に豊富だ。ほかのWebサーバの設定も Apache を参考にしていることが多いため、最初に学ぶ対象として適している。RHEL系では httpd というパッケージ名で提供される。

一方の nginx は後発ながら、大量の同時アクセスに強く設定がシンプルなことから急速にシェアを伸ばし、いまでは Apache と拮抗している。

実務では、nginx を前面に立てて静的ファイルを高速に返したり、後段のアプリへ振り分ける「リバースプロキシ」として使う構成も非常に多く見られる。

コツどちらを選んでも systemd での扱い方は同じ。前章の start / enable / reload の作法が、そのままここで効いてくる。

どちらを選んでもサービスとしての扱い方は共通で、systemd で起動・停止・自動起動を設定する。前の章で覚えた作法が、そのままここで効いてくる。

📦 どうやって導入する dnf

選んだら、まずシステムに入れる番だ。RHEL/MiracleLinux系ではソフトウェアの導入にパッケージマネージャ dnf を使う。Apache なら sudo dnf install httpd、nginx なら sudo dnf install nginx と実行する。

sudo dnf install httpd ……Apacheを導入する。nginx なら sudo dnf install nginx。導入はシステム全体に影響するので sudo が要る。

導入はシステム全体に影響するため管理者権限が必要で、一般ユーザでは sudo を付ける。

dnf installhttpd / nginx確認 [y/N]y で承認完了しました!導入成功依存パッケージも dnf がまとめて入れてくれる確認を省きたいときは -y(中身を把握できるうちは付けない方が安全)

実行すると依存パッケージも含めて「これらをインストールします。よろしいですか? [y/N]」と確認が出るので、内容を見て y で承認する。最後に「完了しました!」と出ればインストール成功だ。

確認を省いて自動で進めたいときは -y オプションを付けられる。ただし何が入るかを把握しないまま多用するのは避け、慣れるうちは内訳を一度目で確かめる癖をつけると安全だ。

すでに入っているかどうかは、Apache なら dnf list --installed | grep httpd や httpd -version、nginx なら nginx -v で確認できる。バージョン文字列が表示されれば導入済み、「コマンドが見つかりません」と出れば未導入だ。

なお、dnf は依存関係を自動で解決し、本体が必要とするライブラリやツールもまとめて導入してくれる。手で個別のファイルを集める必要はない。

🚦 入れただけでは動かない 起動と応答の確認

ここで勘違いしやすいのが、導入しただけではまだサービスは動いていないという点だ。systemctl で起動と自動起動を設定する。

つまずきdnf install しただけではサービスは動かない。enable --now で起動と自動起動をそろえないと、Webサーバは応答しない。

Apache なら sudo systemctl enable --now httpd、nginx なら sudo systemctl enable --now nginx とすれば、自動起動の設定(enable)と即時起動(start)をまとめて行える。

起動できたかは systemctl status httpd(または nginx)の Active: の行で確かめ、active (running) なら成功だ。

次に、サービスが本当に応答するかを確認する。導入直後はどちらもテストページが用意されているので、サーバ自身から curl http://localhost を実行するか、ブラウザで localhost を開く。

curl http://localhost ……サーバ自身から応答を確かめる。Apacheは「Test Page」、nginxは「Welcome to nginx!」が返れば成功。

このテストページは、公開ファイルの置き場であるドキュメントルートにまだ自分のコンテンツ(index.html)を置いていないために表示される初期画面だ。

HTTPの応答ヘッダや、Apache なら「Test Page」と書かれたページ、nginx なら「Welcome to nginx!」が返ってくれば、HTTPサーバは正しく動いている。

🚪 80番ポートは早い者勝ち

ここで重要な制約がある。HTTPは既定で80番ポートを使うが、1つのポートを同時に2つのサービスが占有することはできない。

80番使えるのは1つだけnginx先に確保httpd後から…Address already in use同じポートは2つ同時に使えない。後から起動したほうが失敗する

そのため Apache と nginx を1台のサーバで両方とも起動しようとすると、後から起動したほうが「アドレスはすでに使用中(Address already in use)」というエラーで起動に失敗する。

このエラーは systemctl status や journalctl のログにそのまま出る。両方入れて片方が上がらないときは、まずポートの競合を疑う。

つまずきApacheとnginxを両方起動すると、後発が Address already in use で失敗する。両方入れて片方上がらないときはポート競合を疑う。

学習で片方を試したあとにもう片方を入れる場合は、先に動いているほうを sudo systemctl disable --now httpd のように停止・自動起動解除してから、もう一方を起動するのが基本だ。

通常はどちらか一方だけを有効にして運用する。両方を共存させたい高度な構成では、nginx を前面に置いて後段の Apache へ振り分けるなど、ポートを分けた設計にする。

⚠ つまずいたら、まずこれ

導入直後によくあるのは、サーバ自身(localhost)からは見えるのに、別の端末のブラウザからは表示できないという状況だ。

これはほぼ確実にファイアウォールが原因で、HTTP通信を許可していないために外部からの接続が遮断されている。この解決は次の段階で扱う firewall-cmd によるポート開放だ。

💡
ポイントlocalhost からは見えるのに外から見えない、はほぼファイアウォール。HTTP通信が許可されていないのが原因だ。

ほかには、enable を忘れて再起動後にサーバが上がってこない、80番ポートの競合に気づかず両方起動して失敗する、といったつまずきがある。

実務では、まず dnf で導入し、enable --now で起動と自動起動をそろえ、curl http://localhost で手元の応答を確かめ、続いてファイアウォールを開けて外部からの到達を確認する。この順番で一段ずつ切り分けると、どこで止まっているかを見失わずに済む。

この項目に出てくる用語

サービス(デーモン)さーびす
背後で常時動き続け、要求に応えるプログラム。
ドキュメントルートどきゅめんとるーと
Webサーバが公開するファイルを置く起点ディレクトリ。

関連コマンド

dnfsystemctlnginxhttpd (Apache)curl

▶ 学習アプリでこの続きを学ぶ・演習する