「Apacheという名前は聞いたことがあるけど、Nginxとどう違うの?」
こうした疑問は、Linux入門者がサーバー構築に踏み込む最初のステップでよく出てきます。
ウェブサーバーとは、ブラウザからの「このページを見せてほしい」というリクエストを受け取り、HTMLファイルを返すプログラムのことです。
NginxはApacheと並ぶ代表的なウェブサーバーソフトウェアで、特に高負荷・高速応答が求められる現代のサーバー環境で広く使われています。
この記事では、LinuxにNginxをインストールしてウェブサーバーを立ち上げる手順を、Ubuntu・WSL2環境を前提に初心者向けに解説します。
Rocky Linux(dnf)での手順も合わせて紹介するので、VPS環境でRHEL系を使っている方にも対応しています。
インストールからサービス起動、ファイアウォール設定、HTMLファイルの配置と動作確認まで、手順通りに進めれば1時間もあれば自分のHTMLページをNginxで表示できます。
動作確認環境: Ubuntu 24.04 LTS(WSL2・VPS共通手順)/ Rocky Linux 9
前提条件: sudoが使えるユーザーでログインしていること・インターネット接続があること
この記事のポイント
・Nginxは apt install nginx(Ubuntu)または dnf install nginx(Rocky Linux)の1コマンドでインストールできる
・systemctl start nginx でサービスを起動し、curl -I http://127.0.0.1 で動作確認できる
・WSL2ではfirewall設定が不要、VPSではufwまたはfirewall-cmdでポート80番の開放が必要
・ApacheとNginxは同じ80番ポートを使うため、Apacheが動いている場合は先に停止してからNginxを起動する
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
NginxとApache、何が違うのか?
まず、ウェブサーバーの仕組みをひと言で説明します。ウェブサーバーとは、ブラウザから「このページを見せてほしい」というリクエストを受け取り、HTMLファイルを返す役割を担うプログラムです。
たとえばブラウザで
http://192.168.1.1/ にアクセスすると、そのサーバーが /var/www/html/index.html を読み込んでブラウザへ返す、というのがウェブサーバーの基本的な動きです。Nginxを学ぶ前に、なぜNginxが選ばれるのかを理解しておきましょう。
代表的なウェブサーバーには「Apache(アパッチ)」と「Nginx(エンジンエックス)」の2種類があります。
| 項目 | Apache | Nginx |
|---|---|---|
| 登場年 | 1995年 | 2004年 |
| アーキテクチャ | プロセス・スレッド型 | イベント駆動型 |
| 大量アクセスへの強さ | やや弱い(C10K問題) | 強い(高並列処理が得意) |
| メモリ使用量 | 接続数に比例して増加 | 少ない(非同期処理で効率的) |
| 設定の柔軟性 | .htaccessで手軽に変更可能 | 一元管理型、シンプルな構文 |
| 主な用途 | PHPアプリ・共有ホスティング | リバースプロキシ・静的配信・API |
Nginxは「同時接続数が多い環境でも安定して動く」という特性があり、今やWordPressを含む多くのシステムでも採用されています。
実務でVPSやクラウドを扱うエンジニアがNginxを触ったことがない、というケースはほぼありません。
入門段階でNginxの扱いを身につけておくと、クラウドやVPS環境でのサーバー構築に直結するスキルが得られます。
なお、ApacheとNginxはどちらを先に学んでも問題ありません。コマンド体系や設定ファイルの書き方は異なりますが、「aptまたはdnfでインストールしてsystemctlで起動する」という基本の流れは共通です。これから始めるならNginxを選んでおくと、SSL証明書(Let's Encrypt)の設定やリバースプロキシ構成、クラウドインフラへの発展が自然につながります。
Nginxをインストールする
1. インストール前にApacheとの競合を確認する
NginxとApacheはどちらも80番ポートを使います。Apacheがすでにウェブサーバーとして動いている場合、Nginxが起動できません。インストール前に80番ポートの使用状況を確認しておきましょう。# 80番ポートを使っているプロセスを確認する sudo ss -tlnp | grep :80
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("apache2",pid=1234,fd=4))
# Ubuntu(Apache2の停止) sudo systemctl stop apache2 # Rocky Linux / RHEL系(httpdの停止) sudo systemctl stop httpd
2. パッケージリストを更新する
インストールの前に、aptのパッケージリストを最新にします。これにより、最新バージョンのNginxを取得できます。
# パッケージリストを更新する(Ubuntu・WSL2の場合) sudo apt update # 実行例の出力 Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease Hit:2 http://archive.ubuntu.com/ubuntu noble-updates InRelease Get:3 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB] Reading package lists... Done Building dependency tree... Done Reading state information... Done
3. Nginxをインストールする(Ubuntu・WSL2の場合)
aptコマンドでNginxをインストールします。# Nginxをインストールする(-y で確認プロンプトを自動承認) sudo apt install -y nginx # インストール中の出力例 Reading package lists... Done Building dependency tree... Done The following NEW packages will be installed: nginx nginx-common 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. After this operation, 1,756 kB of additional disk space will be used. ... Setting up nginx (1.24.0-2ubuntu7) ... # インストール完了後にバージョンを確認する nginx -v # 実行例の出力 nginx version: nginx/1.24.0 (Ubuntu)
なお
nginx-extras パッケージを追加するとLuaスクリプトや追加モジュールが使えますが、入門段階では nginx パッケージだけで十分です。4. Rocky Linux・VPS環境の場合(dnf)
Rocky LinuxやAlmaLinuxなどのRHEL系ディストリビューションでは、dnfコマンドを使います。パッケージ名はUbuntuと同じく
nginx です。# Nginxをインストールする(Rocky Linux / RHEL系) sudo dnf install -y nginx # インストール完了後の出力例 Last metadata expiration check: 0:05:10 ago on Fri Jul 25 09:00:00 2026. Dependencies resolved. ... Installed: nginx-1:1.24.0-4.el9.x86_64 Complete! # バージョンを確認する nginx -v # 実行例の出力 nginx version: nginx/1.24.0
nginx ですが、インストール後の起動・状態確認は共通してsystemctlコマンドを使います。5. Nginxのサービスを起動する
インストール直後は、Nginxが自動で起動する場合とそうでない場合があります。systemctl コマンドで状態を確認し、起動・自動起動を設定しましょう。WSL2でsystemdを有効にしている場合(推奨)
# Nginxのサービス状態を確認する sudo systemctl status nginx # サービスが停止していたら起動する sudo systemctl start nginx # OS起動時に自動起動するよう設定する sudo systemctl enable nginx # 自動起動の設定を確認する systemctl is-enabled nginx # 実行例の出力 enabled # 起動後に再度状態を確認する sudo systemctl status nginx # 実行例の出力 * nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled) Active: active (running) since Mon 2026-06-23 09:00:12 JST; 3s ago Process: 1234 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS) Main PID: 1235 (nginx)
「enabled」と表示されれば、次回のOS再起動後も自動でNginxが起動します。
起動と自動起動の設定を一度に行うには、次のコマンドを使う方法もあります。
# 起動と自動起動設定を同時に行う sudo systemctl enable --now nginx
WSL2の初期設定ではsystemdが無効になっていることがあります。その場合は
service コマンドを使います。# serviceコマンドでNginxを起動する sudo service nginx start # 状態を確認する sudo service nginx status # 実行例の出力 * nginx is running
/etc/wsl.conf に以下の設定が入っているか確認してください。# wsl.confの内容を確認する cat /etc/wsl.conf # 以下の内容が含まれていれば有効 [boot] systemd=true
wsl --shutdown を実行してWSL2を再起動してください。動作を確認する(ブラウザでHTMLページを開く)
WSL2環境の場合
WSL2はWindowsのファイアウォールとポート転送を利用しているため、追加のファイアウォール設定は原則不要です。PCのWindowsブラウザで以下のURLにアクセスしてみましょう。
# WSL2のLinuxターミナル上でIPアドレスを確認する hostname -I # 実行例の出力 172.22.185.xxx # Windowsブラウザで以下にアクセスする(localhostでも動く場合が多い) # http://localhost/ # または http://172.22.185.xxx/
【注意】WSL2のバージョンによってはWSL側のIPアドレスが起動のたびに変わります。
localhost でアクセスできない場合は、hostname -I で確認したIPアドレスをブラウザに直接入力してください。VPS・クラウド環境の場合
VPSやクラウドサーバーでは、ファイアウォールのポート80番(HTTP)を開放する必要があります。# firewall-cmdでHTTP(ポート80)とHTTPS(ポート443)を開放する(Rocky Linux / RHEL系) sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload # ufwを使う場合(Ubuntu系) sudo ufw allow 'Nginx Full' sudo ufw status # ufwの出力例 Status: active To Action From -- ------ ---- Nginx Full ALLOW Anywhere
http://203.0.113.10/)にアクセスしてNginxのデフォルトページを確認します。VPSを使っている場合は、OSのファイアウォール設定に加えて、ConoHaやさくらインターネットなどのコントロールパネル側でもポート80番を開放しているか確認してください。
なお、HTTPSで公開する予定がある場合はポート443番も同時に開放しておくと、後でLet's Encryptを設定する際にスムーズです。
ufw allow 'Nginx Full' はポート80番と443番を一括で開放します。curlコマンドでNginxの応答を確認する
ブラウザを使わなくても、curlコマンドでNginxが正常に動作しているかターミナルから確認できます。VPS環境や、SSHでログインしているだけの環境で特に便利です。
# ヘッダー情報だけを取得してNginxの応答を確認する curl -I http://127.0.0.1 # 正常時の出力例 HTTP/1.1 200 OK Server: nginx/1.24.0 (Ubuntu) Date: Fri, 25 Jul 2026 09:10:00 GMT Content-Type: text/html Content-Length: 615 Last-Modified: Mon, 23 Jun 2026 09:00:12 GMT Connection: keep-alive
HTTP/1.1 200 OK と Server: nginx/... が返ってくれば正常です。ブラウザからアクセスできない場合でも、curlが通るかどうかを確認することで、問題がNginx側にあるのかファイアウォール・ネットワーク側にあるのかを切り分けられます。
自分のHTMLファイルを表示する
1. ドキュメントルートとは何か
Nginxには「ドキュメントルート(Document Root)」と呼ばれる公開用ディレクトリがあります。このディレクトリに置いたファイルが、ブラウザからアクセスできる状態になります。Nginxのデフォルト設定では、Webコンテンツ(HTMLファイルなど)を以下のディレクトリに配置します。
・Ubuntu系:
/var/www/html/・Rocky Linux系:
/usr/share/nginx/html/# デフォルトのHTMLファイルを確認する(Ubuntu) ls -la /var/www/html/ # 実行例の出力 total 12 drwxr-xr-x 2 root root 4096 Jun 23 09:00 . drwxr-xr-x 3 root root 4096 Jun 23 09:00 .. -rw-r--r-- 1 root root 615 Jun 23 09:00 index.nginx-debian.html
index.nginx-debian.html(Nginxのデフォルトページ)だけが置かれています。新しいHTMLファイルを追加することで自分のページを公開できます。2. 自作のHTMLファイルを作成して配置する
自分のHTMLファイルを作成して、ブラウザに表示してみましょう。以下の2通りの方法で作成できます。デフォルトページを残したままテストしたい場合は「方法2」が便利です。
方法1: コマンドで一括作成する(コピペで素早く試したい場合)
# シンプルなHTMLファイルを作成する sudo bash -c 'cat > /var/www/html/index.html << EOF
Nginx入門ページ はじめてのNginxページ
Linux上のNginxでHTMLが表示できました。
EOF' # 作成されたファイルを確認する cat /var/www/html/index.html
# nanoエディタでhello.htmlを新規作成する sudo nano /var/www/html/hello.html
はじめてのNginxページ Hello, Nginx World!
Nginxで公開した最初のHTMLページです。
ブラウザで
http://localhost/hello.html(VPSの場合は http://サーバーIP/hello.html)にアクセスすると、「Hello, Nginx World!」が表示されます。実際の運用では
/var/www/html/ 以下にサブディレクトリを作ってプロジェクトごとに整理することも多いですが、まずは動く感触をつかむことが先決です。3. ファイルのパーミッションを確認する
HTMLファイルがブラウザから読み込めない場合は、パーミッション(ファイルアクセス権限)が問題のことがあります。# パーミッションを確認する ls -la /var/www/html/index.html # 正常な出力例(644が一般的) -rw-r--r-- 1 root root 215 Jun 23 09:05 /var/www/html/index.html # もし権限が不足している場合は修正する sudo chmod 644 /var/www/html/index.html # ディレクトリの権限も確認する(755が標準) sudo chmod 755 /var/www/html/
-rw-r--r--(644)になっていれば正常です。ディレクトリは drwxr-xr-x(755)が標準的な権限です。Nginxの設定ファイルを確認する
Nginxの動作は設定ファイルで制御されています。初心者のうちは細かい設定は不要ですが、どこに何があるかを把握しておくと後々役立ちます。
| ファイル・ディレクトリ | 内容 |
|---|---|
| /etc/nginx/nginx.conf | メインの設定ファイル |
| /etc/nginx/sites-available/ | バーチャルホスト設定ファイルの保管場所 |
| /etc/nginx/sites-enabled/ | 有効化されたバーチャルホスト(sites-availableへのシンボリックリンク) |
| /var/www/html/ | デフォルトのドキュメントルート・Ubuntu系(HTMLファイル置き場) |
| /usr/share/nginx/html/ | デフォルトのドキュメントルート・Rocky Linux系 |
| /var/log/nginx/access.log | アクセスログ |
| /var/log/nginx/error.log | エラーログ(障害時はまずここを確認する) |
# 設定ファイルの構文チェックをする(変更後は必ず実行する) sudo nginx -t # 正常な出力例 nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful # 設定を変更した後はNginxをリロードして反映させる(サービス無停止で設定変更が可能) sudo systemctl reload nginx
nginx -t で構文チェックをしてからリロードすること。構文エラーがある状態でリロードすると、本番環境でサービスが止まる原因になります。
トラブルシュート・よくあるエラー対処
「Job for nginx.service failed」が出た場合
Nginx起動時にエラーが出た場合、まず設定ファイルの構文エラーを疑いましょう。# エラーの詳細を確認する sudo systemctl status nginx # journalctlでNginxのログを確認する(より詳細なエラー情報が得られる) sudo journalctl -u nginx -n 30 --no-pager # Nginxのエラーログを確認する sudo tail -30 /var/log/nginx/error.log # 設定ファイルの構文チェックをする sudo nginx -t
journalctl -u nginx はsystemdのジャーナルログを直接参照するため、設定ファイルの構文エラーやポート競合など、error.log より先に確認できる情報が多くあります。ポート80番がすでに使われているためNginxが起動しない場合
Apacheなど別のプロセスがポート80番を占有していると、Nginxは起動できません。まずポートの使用状況を確認しましょう。
# ポート80番を使っているプロセスを確認する sudo ss -tlnp | grep :80 # 出力例(Apacheがポート80を占有している場合) LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("apache2",pid=2345,fd=3)) # Apacheを先に停止してからNginxを起動する sudo systemctl stop apache2 sudo systemctl start nginx
ブラウザで「接続できない」と表示される場合
Nginxが起動しているのにブラウザからアクセスできない場合は、ポートが開いていない可能性があります。# Nginxがポート80番でListenしているか確認する sudo ss -tlnp | grep nginx # 正常な出力例 LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=1235,fd=6)) # ファイアウォールの状態を確認する(Ubuntu系) sudo ufw status # ファイアウォールの状態を確認する(Rocky Linux系) sudo firewall-cmd --list-all
ss -tlnp でListenを確認し、その後でcurlとブラウザの両方を試してください。curlが通ってブラウザで繋がらない場合は、クライアント側の問題(プロキシ設定など)を疑います。curlも通らない場合はファイアウォールの設定を見直しましょう。「403 Forbidden」が表示される場合
ファイルのパーミッションか、index.htmlが存在しない場合に起こりやすいエラーです。# ドキュメントルートにファイルが存在するか確認する ls -la /var/www/html/ # パーミッションを修正する sudo chmod 644 /var/www/html/index.html # ディレクトリのパーミッションも確認する sudo chmod 755 /var/www/html/
設定ファイルを変更したのに反映されない場合
Nginxの設定ファイルを編集した後はリロードが必要です。まず構文チェックを行ってからリロードする習慣をつけましょう。# 設定ファイルの構文をチェックする sudo nginx -t # 問題がなければ設定をリロードする(サービス停止なし) sudo systemctl reload nginx
nginx -t が「syntax is ok」「test is successful」と返せばリロードしてもサービスは止まりません。エラーが出た場合は、リロードせずに設定ファイルを修正してから再度チェックしてください。WSL2で「localhost」に繋がらない場合
WSL2環境では、WindowsのブラウザからLinux側のポートへアクセスするためにポートフォワーディングが有効になっている必要があります。Windows 11の一部環境ではこの設定が自動で有効にならないことがあります。
# WSL2のIPアドレスを調べてブラウザで直接指定する hostname -I # 出力例: 172.22.185.10 # Windowsブラウザのアドレスバーに以下を入力する # http://172.22.185.10/ # WSL側でポート80番がListenされているか確認する sudo ss -tlnp | grep :80
localhost 経由の問題はWSL2のネットワーク設定(/etc/wsl.conf の networkingMode)に起因していることが多いです。本記事のまとめ
LinuxへのNginxインストールから動作確認までの手順を整理します。| やりたいこと | コマンド(Ubuntu系) | コマンド(Rocky Linux系) |
|---|---|---|
| パッケージリストを更新する | sudo apt update |
sudo dnf check-update |
| Nginxをインストールする | sudo apt install -y nginx |
sudo dnf install -y nginx |
| バージョンを確認する | nginx -v |
nginx -v |
| サービスを起動する | sudo systemctl start nginx |
sudo systemctl start nginx |
| 自動起動を設定する | sudo systemctl enable nginx |
sudo systemctl enable nginx |
| 自動起動の設定を確認する | systemctl is-enabled nginx |
systemctl is-enabled nginx |
| サービスの状態を確認する | sudo systemctl status nginx |
sudo systemctl status nginx |
| curlで動作確認する | curl -I http://127.0.0.1 |
curl -I http://127.0.0.1 |
| ファイアウォールにHTTPを許可する | sudo ufw allow 'Nginx Full' |
sudo firewall-cmd --permanent --add-service=http |
| 設定ファイルの構文チェックをする | sudo nginx -t |
sudo nginx -t |
| 設定をリロードする | sudo systemctl reload nginx |
sudo systemctl reload nginx |
| エラーログを確認する | sudo tail -30 /var/log/nginx/error.log |
sudo tail -30 /var/log/nginx/error.log |
| ポートの使用状況を確認する | sudo ss -tlnp | grep :80 |
sudo ss -tlnp | grep :80 |
ウェブサーバーを自分の手で動かすという経験は、Linuxを「使う」から「動かす」への大きな一歩です。
Nginxが動いたら、次は設定ファイルをカスタマイズしたり、PHPと連携させてみたりと、応用の幅がぐっと広がります。
無料の「Linuxサーバー構築入門マニュアル(図解60ページ)」をプレゼントしています。
コマンド学習の先にある「サーバーをゼロから組み立てる力」を、初心者が迷わない順序で学べる一冊です。
無料マニュアルを受け取る >>
<PR>手元に置いて学びを深める1冊
まずは無料メルマガでLinuxサーバーの基礎を固め、Nginxの設定チューニングや本番運用のベストプラクティスまで踏み込むなら手元に置きたい1冊です。
次に読む記事(実務スキルへのステップアップ)
Nginxの基本がつかめたら、以下の実務記事でLinuxのサーバー管理スキルをさらに深めてください。・systemctlコマンドの使い方|サービスの起動・停止・自動起動設定
・firewall-cmdコマンドでポートを開放・管理する方法|ゾーン・サービス・永続化の使い分け
・sudoコマンドでroot権限を安全に実行する方法|visudoの設定からログ確認まで
・logrotateでLinuxのログを自動ローテーションする方法|設定ファイルの書き方とトラブル対処
・SSHのポート番号を変更する方法|sshd_configの設定からfirewalld・SELinux対応まで
・nmcliコマンドでネットワーク接続を設定する方法|静的IP・DHCP・接続追加・削除の手順も
・ssコマンドでソケット情報を確認する方法|LISTEN・ESTABの見方やポート確認も
・ApacheとNginxの違いと使い分け|「なぜ選んだか」を説明できますか?
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 次のページへ:Docker Compose入門|複数コンテナでWordPress環境を構築するハンズオン
- 前のページへ:AIアシスタントでLinuxエラーを解決する入門・ChatGPTにエラーを貼り付けてトラブルシュートする方法
- この記事の属するカテゴリ:【Linux入門】初心者のための基礎知識・講座へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます