LinuxにNginxをインストールして使う入門・Ubuntu・WSL2でウェブサーバーを構築して初めてのHTMLページを表示する方法

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)【Linux入門】初心者のための基礎知識・講座 > LinuxにNginxをインストールして使う入門・Ubuntu・WSL2でウェブサーバーを構築して初めてのHTMLページを表示する方法
「Linuxでウェブサーバーを作ってみたいけど、何から始めればいいかわからない。」
「Apacheという名前は聞いたことがあるけど、Nginxとどう違うの?」

こうした疑問は、Linux入門者がサーバー構築に踏み込む最初のステップでよく出てきます。
ウェブサーバーとは、ブラウザからの「このページを見せてほしい」というリクエストを受け取り、HTMLファイルを返すプログラムのことです。
NginxはApacheと並ぶ代表的なウェブサーバーソフトウェアで、特に高負荷・高速応答が求められる現代のサーバー環境で広く使われています。

この記事では、LinuxにNginxをインストールしてウェブサーバーを立ち上げる手順を、Ubuntu・WSL2環境を前提に初心者向けに解説します。
Rocky Linux(dnf)での手順も合わせて紹介するので、VPS環境でRHEL系を使っている方にも対応しています。
インストールからサービス起動、ファイアウォール設定、HTMLファイルの配置と動作確認まで、一連の流れを順番に追っていきましょう。

動作確認環境: Ubuntu 24.04 LTS(WSL2・VPS共通手順)/ Rocky Linux 9
前提条件: sudoが使えるユーザーでログインしていること・インターネット接続があること

この記事のポイント

・Nginxは `apt install nginx` の1コマンドでインストールできる
・`systemctl start nginx` でサービスを起動し、`curl -I http://127.0.0.1` で動作確認できる
・WSL2ではfirewall設定が不要、VPSではufwまたはfirewall-cmdでポート80番の開放が必要
・コンテンツはデフォルトで `/var/www/html/` に配置する


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

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をインストールする

1. パッケージリストを更新する

インストールの前に、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

「Reading state information... Done」まで表示されれば、パッケージリストの更新は成功です。

2. 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` パッケージだけで十分です。

3. 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

Ubuntu(apt)とRocky Linux(dnf)でパッケージ名は同じ `nginx` ですが、インストール後の起動・状態確認は共通してsystemctlコマンドを使います。

4. 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)

「Active: active (running)」と表示されればNginxが動いています。
「enabled」と表示されれば、次回のOS再起動後も自動でNginxが起動します。

起動と自動起動の設定を一度に行うには、次のコマンドを使う方法もあります。

# 起動と自動起動設定を同時に行う sudo systemctl enable --now nginx

WSL2でsystemdが無効な場合

WSL2の初期設定ではsystemdが無効になっていることがあります。その場合は `service` コマンドを使います。

# serviceコマンドでNginxを起動する sudo service nginx start # 状態を確認する sudo service nginx status # 実行例の出力 * nginx is running

WSL2でsystemdを有効にするには `/etc/wsl.conf` に `[boot]` セクションを追加します(詳細はMicrosoftの公式ドキュメントを参照してください)。

動作を確認する(ブラウザで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/

Nginxのデフォルトページ(「Welcome to nginx!」と書かれたページ)が表示されれば成功です。

【注意】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

設定後、ブラウザでサーバーのIPアドレス(例: `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ファイルなど)を `/var/www/html/` ディレクトリに配置します。

# デフォルトのHTMLファイルを確認する 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

方法2: 別ファイルとして新規作成する(デフォルトページを残したい場合)

# nanoエディタでhello.htmlを新規作成する sudo nano /var/www/html/hello.html

nanoが起動したら、以下のHTMLを入力します。

はじめてのNginxページ

Hello, Nginx World!

Nginxで公開した最初のHTMLページです。

編集が終わったら Ctrl+X を押し、「Save modified buffer?」に Y と入力してEnterを押すと保存されます。
ブラウザで `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/ デフォルトのドキュメントルート(HTMLファイル置き場)
/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とApacheを同時に動かしたい場合は、どちらかのポートを変える(例: Apacheを8080番に移す)設定が必要です。

ブラウザで「接続できない」と表示される場合

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/

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サーバー構築の「型」を体系的に身につけたい方へ、
無料の「Linuxサーバー構築入門マニュアル(図解60ページ)」をプレゼントしています。
コマンド学習の先にある「サーバーをゼロから組み立てる力」を、初心者が迷わない順序で学べる一冊です。
無料マニュアルを受け取る >>

次に読む記事(実務スキルへのステップアップ)

Nginxの基本がつかめたら、以下の実務記事でLinuxのサーバー管理スキルをさらに深めてください。

systemctlコマンドの使い方|サービスの起動・停止・自動起動設定
firewall-cmdコマンドでポートを開放・管理する方法|ゾーン・サービス・永続化の使い分け
sudoコマンドでroot権限を安全に実行する方法|visudoの設定からログ確認まで
logrotateでLinuxのログを自動ローテーションする方法|設定ファイルの書き方とトラブル対処
SSHのポート番号を変更する方法|sshd_configの設定からfirewalld・SELinux対応まで
nmcliコマンドでネットワーク接続を設定する方法|静的IP・DHCP・接続追加・削除の手順も
ssコマンドでソケット情報を確認する方法|LISTEN・ESTABの見方やポート確認も
ApacheとNginxの違いと使い分け|「なぜ選んだか」を説明できますか?

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。