「WSL2やVPSでWebサーバーを動かしてみたいが、最初の一歩がわからない。」
こういった最初のつまずきは、手順の確認と環境ごとの違いを理解すれば必ず解消できます。
ApacheはWordPressが動くLAMP環境(Linux・Apache・MySQL・PHP)の中核を担う、世界でもっとも普及したWebサーバーです。Linuxサーバーを扱う現場でも今なお現役で使われており、「Webサーバーを自分の手で動かす」という体験はLinuxを学ぶ上で最初のわかりやすいマイルストーンになります。
この記事では、UbuntuへのApacheインストール手順を初心者向けにステップバイステップで解説します。WSL2とVPSそれぞれでの動作確認、HTMLファイルの配置方法、主要モジュールの有効化、エラーログの見方、よくあるエラーの対処まで、実行結果つきで説明します。
動作確認環境:Ubuntu 24.04 LTS(WSL2) / Ubuntu 22.04 LTS(VPS)
この記事のポイント
・sudo apt install apache2 の1コマンドでUbuntuにApacheをインストールできる
・インストール後はsudo systemctl start apache2で起動してブラウザで確認する
・HTMLファイルの置き場所は /var/www/html/(DocumentRoot)
・WSL2では「localhost」、VPSでは「サーバーのIPアドレス」でアクセスする
・a2enmod/a2dismodでモジュールの有効化・無効化を管理できる
・トラブル時は /var/log/apache2/error.log でエラーの原因を確認する
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
ApacheとはどんなWebサーバーか?NginxやIISとの違い
WebサーバーとはHTMLファイルや画像を保存しておき、ブラウザからのリクエストに応じてファイルを返すソフトウェアです。ブラウザでURLを入力したときに「どのファイルを返すか」を判断して送り返しているのが、Webサーバーの役割です。代表的なWebサーバーには以下の3種類があります。
・Apache(アパッチ):Linux上でもっとも普及しているWebサーバー。.htaccessによる柔軟なアクセス制御、mod_rewriteによるURL書き換えなど、豊富なモジュール機能が強み。PHPやWordPressとの組み合わせにも強い
・Nginx(エンジンエックス):Apache登場後に普及した高速なWebサーバー。大量の同時接続に強く、リバースプロキシとしても使われる
・IIS(アイアイエス):Windowsサーバー専用のWebサーバー。Microsoft製品との連携が強み
Linuxの現場ではLAMPスタック(Linux・Apache・MySQL・PHP)という組み合わせが長年の定番です。WordPressをはじめとするPHP製CMSは今でもApacheを前提に動作するものが多く、設定ファイルの読み方やサービスの起動・停止操作を身につけておくと、他のLinuxサービスの管理にも応用できます。
ApacheはMPM(Multi-Processing Module)という仕組みでリクエストを処理します。Ubuntu 22.04/24.04のデフォルトはmpm_eventで、接続数が多い環境でも効率よくリクエストを処理できます。PHPをApacheに直接組み込む場合はmpm_preforkへの切り替えが必要になるケースもありますが、PHP-FPMと組み合わせればmpm_eventのままPHPを動かすことができます。まずはデフォルト設定のまま進めましょう。
UbuntuにApacheをインストールする手順
1. パッケージ一覧を更新してインストールする
まず、apt のパッケージ一覧を最新にしてからApacheをインストールします。インストール前にapt update を実行するのが基本的な作法です。-y オプションは「途中の確認をすべてYesで回答する」という意味で、スクリプトや自動化での使用に向いています。# パッケージ一覧を最新にする $ sudo apt update Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease Hit:2 http://archive.ubuntu.com/ubuntu noble-updates InRelease Reading package lists... Done # Apacheをインストールする(-yで確認をスキップ) $ sudo apt install apache2 -y Reading package lists... Done Building dependency tree... Done The following additional packages will be installed: apache2-bin apache2-data apache2-utils Suggested packages: apache2-doc apache2-suexec-pristine apache2-suexec-custom The following NEW packages will be installed: apache2 apache2-bin apache2-data apache2-utils 0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded. Do you want to continue? [Y/n] Y
・apache2-bin:Apacheの実行バイナリ(apache2コマンド本体)
・apache2-data:デフォルトの設定テンプレートやDocumentRootの初期ファイル
・apache2-utils:apachectlやhtpasswd等の管理ツール群
インストールが完了すると、Apacheは自動的にサービスとして起動します。次のステップでバージョン確認を行いましょう。
2. インストールされたApacheのバージョンを確認する
インストール直後に、どのバージョンが入ったかを確認しておきましょう。トラブルが起きたときに「どのバージョンか」がわかると、ドキュメントや検索の精度が上がります。$ apache2 -v Server version: Apache/2.4.58 (Ubuntu) Server built: 2024-03-19T12:00:00
有効になっているモジュールの一覧も確認できます。後述のa2enmodでモジュールを追加した際の確認にも使います。
# 有効なモジュール一覧を確認する(rewriteが入っているか確認する例) $ apachectl -M | grep rewrite rewrite_module (shared)
3. Apacheを起動してブラウザで確認する
インストールが完了したら、Apacheを起動して動作を確認します。# Apacheを起動する $ sudo systemctl start apache2 # 起動状態を確認する $ sudo systemctl status apache2 * apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2026-07-31 09:00:01 JST; 3s ago Docs: https://httpd.apache.org/docs/2.4/ Main PID: 2345 (apache2) Tasks: 6 (limit: 2316) Memory: 12.4M CPU: 145ms CGroup: /system.slice/apache2.service |-2345 /usr/sbin/apache2 -k start |-2346 /usr/sbin/apache2 -k start |-2347 /usr/sbin/apache2 -k start
ターミナルだけで動作確認したい場合はcurlが便利です。
# ターミナルからApacheのデフォルトページを確認する $ curl -s http://localhost | head -5 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Apache2 Ubuntu Default Page: It works</title>
次に、ブラウザでアクセスして確認します。WSL2の場合は
localhost、VPSの場合は サーバーのIPアドレス をブラウザのアドレスバーに入力してください。・WSL2の場合:
http://localhost・VPSの場合:
http://(サーバーのIPアドレス)(例:http://203.0.113.10)「Apache2 Ubuntu Default Page」と書かれたページが表示されれば、Apacheのインストールと起動は完了です。
4. 自動起動を設定して再起動後も動くようにする
このままではサーバーを再起動したときにApacheが自動で起動しません。本番運用を意識して、自動起動の設定もしておきましょう。# 自動起動を有効にする $ sudo systemctl enable apache2 Synchronizing state of apache2.service with SysV service script with /usr/lib/systemd/systemd-sysv-install. Executing: /usr/lib/systemd/systemd-sysv-install enable apache2 # 自動起動の設定を確認する(enabledになっていればOK) $ sudo systemctl is-enabled apache2 enabled
enabled と表示されれば、次回の再起動時からApacheが自動で起動します。自分のHTMLファイルを表示する
Apacheのデフォルトページが表示できたら、次は自分で作ったHTMLファイルを表示してみましょう。1. DocumentRootとはApacheのファイル置き場のこと
Apacheが公開するファイルを置く場所を DocumentRoot(ドキュメントルート) といいます。Ubuntuの場合、デフォルトのDocumentRootは/var/www/html/ です。ブラウザで
http://localhost/ にアクセスしたとき、Apacheは /var/www/html/index.html を返します。このディレクトリにHTMLファイルを置けば、ブラウザから見られるようになります。DocumentRootの場所は
/etc/apache2/sites-available/000-default.conf で変更できますが、最初はデフォルトの /var/www/html/ を使うのが無難です。複数のドメインを1台のサーバーで動かしたい場合は「VirtualHost(バーチャルホスト)」という仕組みを使って、ドメインごとに異なるDocumentRootを設定します。ここでは1ドメインのシンプルな構成で進めます。2. HTMLファイルを作成して/var/www/htmlに配置する
/var/www/html/ は所有者がrootなので、ファイルを作成するにはsudoが必要です。nanoエディタで作成する場合は Ctrl+O で保存・Ctrl+X で終了します。ここではコマンドで一括書き込む方法を紹介します。# DocumentRootの中身を確認する(デフォルトのindex.htmlが入っている) $ ls -l /var/www/html/ total 12 -rw-r--r-- 1 root root 10918 May 1 09:00 index.html # テスト用のHTMLファイルを作る(sudoが必要) $ sudo bash -c 'cat > /var/www/html/hello.html << EOF <html> <head><title>初めてのApacheページ</title></head> <body> <h1>Hello, Apache!</h1> <p>Linuxで最初のWebページを作りました。</p> </body> </html> EOF' # ファイルが作成されたか確認する $ ls -la /var/www/html/hello.html -rw-r--r-- 1 root root 148 Jul 31 09:05 /var/www/html/hello.html
-rw-r--r--(644)は「所有者が読み書き可、それ以外は読み取り専用」を意味します。Apacheはwww-dataユーザーで動作しており、このパーミッションであれば正常にファイルを読めます。ファイルの所有者をwww-dataに変更しておくと、後からApacheプロセスがファイルを更新・生成する場合(PHPのキャッシュ等)に権限エラーを避けやすくなります。学習段階ではroot所有644のままで問題ありません。
3. ブラウザでアクセスして表示を確認する
作成したHTMLファイルにブラウザでアクセスします。・WSL2の場合:
http://localhost/hello.html・VPSの場合:
http://(サーバーのIPアドレス)/hello.html「Hello, Apache!」と表示されれば成功です。これでApacheが自分のHTMLファイルを正しく返していることが確認できました。
ターミナルからcurlコマンドで確認することもできます。
$ curl http://localhost/hello.html <html> <head><title>初めてのApacheページ</title></head> <body> <h1>Hello, Apache!</h1> <p>Linuxで最初のWebページを作りました。</p> </body> </html>
Apacheのモジュールを有効化・無効化する
Apacheの強みの一つが、機能をモジュール単位で追加・削除できる拡張性です。UbuntuのApacheはa2enmod(enable module)とa2dismod(disable module)コマンドでモジュールを管理します。1. よく使うApacheモジュール
実務でよく使うモジュールを紹介します。・mod_rewrite:URLの書き換え。WordPressのパーマリンク設定に必須
・mod_ssl:HTTPS(SSL/TLS)対応。Let's Encryptを使う際に有効化
・mod_headers:レスポンスヘッダーの追加・変更。セキュリティヘッダー設定に使う
・mod_deflate:コンテンツの圧縮転送。ページの読み込み速度改善に効果的
・mod_status:Apacheのリアルタイム稼働状況を確認する管理用ページを提供する
2. モジュールを有効化・無効化するコマンド
# mod_rewriteを有効化する $ sudo a2enmod rewrite Enabling module rewrite. To activate the new configuration, you need to run: service apache2 restart # 有効化後はApacheを再起動して反映する $ sudo systemctl restart apache2 # モジュールを無効化する場合 $ sudo a2dismod rewrite Module rewrite disabled. To activate the new configuration, you need to run: service apache2 restart # 現在有効なモジュール一覧を確認する $ apachectl -M | grep rewrite rewrite_module (shared)
AllowOverride All の設定と組み合わせることで、.htaccess によるURL書き換えが有効になります。3. .htaccessを使えるようにする
Apacheのデフォルト設定では.htaccess ファイルが無効になっています。WordPressや独自のURL書き換えを使う場合は、設定ファイルで有効化が必要です。# バーチャルホスト設定ファイルを編集する $ sudo nano /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80> ブロック内に以下を追加します。<Directory /var/www/html> AllowOverride All </Directory>
# 設定ファイルの文法をチェックする $ sudo apachectl configtest Syntax OK # 設定を反映する(接続中のユーザーへの影響なし) $ sudo systemctl reload apache2
WSL2でApacheを使う時の違いと注意点
WSL2でApacheを使う場合、VPSと異なる点がいくつかあります。1. WSL2でsystemdが使えるか確認する
WSL2のUbuntu 22.04以降はsystemdをサポートしていますが、デフォルトで有効になっていない場合があります。まず有効かどうか確認します。# PID 1 がsystemdかどうか確認する $ ps -p 1 -o comm= systemd
systemd と表示されればそのまま使えます。init と表示された場合は、以下の手順でsystemdを有効化します。# /etc/wsl.conf にsystemd有効化の設定を追加する $ sudo bash -c 'cat >> /etc/wsl.conf << EOF [boot] systemd=true EOF' # 設定後はPowerShellからWSL2を再起動する # wsl --shutdown # (その後Ubuntuを再度開くとsystemdが有効になる)
wsl --shutdown の後にUbuntuを再起動すると、次回からsystemdが有効になります。systemdが使えない環境では
sudo service apache2 start を試してください。# systemdが無効な場合(service コマンドを使う) $ sudo service apache2 start * Starting Apache httpd web server apache2
2. ブラウザのアクセス先はlocalhostで統一
WSL2ではWindowsブラウザからhttp://localhost でそのままLinux側のApacheにアクセスできます。ポート80が使われていれば、特別な設定なしで動作します。WSL2ではLinuxのIPアドレス(172.x.x.x等)ではなく
localhost を使うのが確実です。WSL2のIPアドレスはWSL再起動のたびに変わりますが、localhost ならWindowsが自動的にWSL2のApacheに転送してくれます。3. Windows側のポート80が使われている場合
Skypeなど一部のWindowsアプリがポート80を占有している場合、Apacheが起動できないことがあります。Apacheの起動ログに「Address already in use」と出た場合はこの状況です。まずLinux側でポート80を使っているプロセスを確認します。
# ポート80を使っているプロセスを確認する $ sudo ss -tlnp | grep :80 LISTEN 0 511 *:80 *:* users:(("apache2",pid=2345,fd=4))
Apacheのエラーログを確認する
Apacheが期待通りに動かない場合、まず確認すべきなのがエラーログです。エラーログには「何が起きたか」「どのファイルで問題が発生したか」が記録されており、トラブルの原因を絞り込む最初の手がかりになります。# エラーログをリアルタイムで監視する(Ctrl+Cで終了) $ sudo tail -f /var/log/apache2/error.log # 最新10行だけ確認する $ sudo tail -10 /var/log/apache2/error.log [Thu Jul 31 09:00:01.123456 2026] [mpm_event:notice] [pid 2345:tid 139...] AH00489: Apache/2.4.58 (Ubuntu) configured -- resuming normal operations [Thu Jul 31 09:00:01.123460 2026] [core:notice] [pid 2345:tid 139...] AH00094: Command line: '/usr/sbin/apache2'
・
[mpm_event:notice] のように [モジュール名:レベル] が記録される・エラーレベルは
emerg(緊急)> crit > error > warn > notice > info > debug の順に重大度が下がる・
error 以上が出ていたら要注意。notice や info は正常動作のログerrorレベルの行だけを絞り込んで確認する場合はgrepを使います。
# errorレベル以上のログだけ抽出する $ sudo grep '\[error\]' /var/log/apache2/error.log # 特定のIPアドレスに関するエラーを調べる $ sudo grep '192.168.1.100' /var/log/apache2/error.log
# アクセスログを確認する $ sudo tail -5 /var/log/apache2/access.log 127.0.0.1 - - [31/Jul/2026:09:05:23 +0900] "GET /hello.html HTTP/1.1" 200 148 "-" "curl/7.88.1"
200」はHTTPステータスコードで正常なレスポンスを意味します。「403」や「404」が出ていれば、アクセスできない原因のヒントになります。よくあるエラーと対処法
「This site can't be reached」ブラウザで表示できない
ブラウザがサーバーに接続できていない状態です。以下の手順で確認してください。# 1. Apacheが起動しているか確認する $ sudo systemctl status apache2 # "Active: active (running)" でなければ起動する $ sudo systemctl start apache2 # 2. ポート80でLISTENしているか確認する $ sudo ss -tlnp | grep :80 LISTEN 0 511 *:80 *:* users:(("apache2",pid=2345,fd=4)) # 3. VPSの場合はファイアウォールでポート80が開いているか確認する $ sudo ufw status Status: active To Action From -- ------ ---- 80/tcp ALLOW Anywhere
# ポート80を開放する(UFW使用のUbuntu向け) $ sudo ufw allow 80/tcp Rules updated Rules updated (v6)
「403 Forbidden」が表示される
Apacheはファイルを見つけているが、権限の問題でファイルを返せない状態です。# ファイルの権限を確認する $ ls -la /var/www/html/hello.html -rw-r--r-- 1 root root 148 Jul 31 09:05 /var/www/html/hello.html # 所有者がrootで一般ユーザーでも読めるパーミッション(644)になっているか確認 # rw-r--r-- の3文字目と6文字目がr(read)になっていればOK
/var/www/html/ ディレクトリ自体の権限を確認します。$ ls -ld /var/www/html/ drwxr-xr-x 2 root root 4096 Jul 31 09:00 /var/www/html/ # 755(rwxr-xr-x)になっていればApacheが読める状態
「AH00072: make_sock: could not bind to address」でApacheが起動できない
ポート80がすでに別のプロセスに使われているときに出るエラーです。エラーログで状況を確認してから対処します。# エラーログを確認する $ sudo tail -5 /var/log/apache2/error.log [...] AH00072: make_sock: could not bind to address 0.0.0.0:80 [...] AH00015: Unable to open logs # ポート80を使っているプロセスを調べる $ sudo ss -tlnp | grep :80 LISTEN 0 128 *:80 *:* users:(("nginx",pid=1234,fd=6)) # nginx が使っている場合は停止してからApacheを起動する $ sudo systemctl stop nginx $ sudo systemctl start apache2
「AH00558: Could not reliably determine the server's fully qualified domain name」警告
この警告はApacheの設定でServerNameが未設定のときに出ますが、Webサーバーとしての動作自体には影響しません。気になる場合は設定ファイルにServerNameを追加して解消できます。# apache2.confにServerNameを追加する $ echo "ServerName localhost" | sudo tee -a /etc/apache2/apache2.conf # 設定ファイルの文法をチェックする $ sudo apachectl configtest Syntax OK # 設定を反映する(接続中のユーザーへの影響なし) $ sudo systemctl reload apache2
Syntax OK と表示されれば設定ファイルに問題はありません。Apacheの設定変更は restart(プロセスを再起動)ではなく reload(設定だけ再読み込み)で反映するのが現場での作法です。接続中のユーザーへの影響が出ないためです。「500 Internal Server Error」が返ってくる
Apacheはリクエストを受け取れているが、サーバー側でエラーが発生している状態です。原因の大半は.htaccessの記述ミスかモジュール未有効化です。# まずエラーログで原因を確認する $ sudo tail -20 /var/log/apache2/error.log # .htaccessのRewriteRule記述ミスの例 [error] [client 127.0.0.1] AH00124: Request exceeded the limit of 10 internal redirects # mod_rewriteが有効か確認する(表示されなければ未有効) $ apachectl -M | grep rewrite # 有効でなければa2enmodで有効化してからrestartする $ sudo a2enmod rewrite $ sudo systemctl restart apache2
本記事のまとめ
| やりたいこと | コマンド |
|---|---|
| パッケージ一覧を更新する | sudo apt update |
| Apacheをインストールする | sudo apt install apache2 -y |
| インストールしたバージョンを確認する | apache2 -v |
| 有効なモジュール一覧を確認する | apachectl -M |
| Apacheを起動する | sudo systemctl start apache2 |
| Apacheの状態を確認する | sudo systemctl status apache2 |
| 自動起動を有効にする | sudo systemctl enable apache2 |
| 自動起動の設定を確認する | sudo systemctl is-enabled apache2 |
| Apacheを停止する | sudo systemctl stop apache2 |
| 設定を反映する(接続中に影響なし) | sudo systemctl reload apache2 |
| Apacheを再起動する | sudo systemctl restart apache2 |
| モジュールを有効化する | sudo a2enmod モジュール名 |
| モジュールを無効化する | sudo a2dismod モジュール名 |
| ポート80の待ち受けを確認する | sudo ss -tlnp | grep :80 |
| UFWでポート80を開放する | sudo ufw allow 80/tcp |
| エラーログをリアルタイム確認する | sudo tail -f /var/log/apache2/error.log |
| 設定ファイルの文法をチェックする | sudo apachectl configtest |
sudo apt install apache2 の1コマンドで完了します。あとは systemctl で起動・停止・自動起動を管理し、/var/www/html/ にHTMLファイルを置くだけでWebページを公開できます。モジュールの追加はa2enmodで簡単に行えます。トラブルが起きたときは /var/log/apache2/error.log を確認するのが現場での基本動作です。まずはWSL2でローカル環境に動かしてみて、手順を体で覚えてから本番のVPSに移行していくのがおすすめです。関連記事 ~ ここから実践的なスキルを身につける
Apacheを動かしたら、次はサービス管理・ポート制御・ログ解析などのLinuxスキルを合わせて身につけておきましょう。・サーバー構築:Apacheの設定ファイルを構文チェックする方法|httpd -tとapachectl configtestで文法エラーを検出 ~ Apache設定変更後に必ず実行するコマンド
・ネットワーク:firewall-cmdコマンドでポートを開放・管理する方法|ゾーン・サービス・永続化の使い分け ~ RHEL系サーバーのポート開放手順
・Linux Tips:Apacheのアクセスログを設定する方法|CustomLogとLogFormatの書き方とcombined形式の読み方 ~ Webサーバーのログを読み解くスキル
・トラブルシューティング:fuserコマンドで使用中のポートを占有するプロセスを特定する方法|umount時のtarget is busy解消 ~ ポート80が使えない原因を特定する
・シェルスクリプト:loggerコマンドでシステムログに任意のメッセージを記録する方法|rsyslog転送やシェルスクリプト活用も ~ Apacheの起動スクリプトにログを残す
・セキュリティ:fail2banコマンドでブルートフォース攻撃を自動ブロックする方法|SSHの不正アクセス対策とトラブルシュートも ~ WebサーバーへのSSH経由の不正アクセスを防ぐ
・ディスク操作:duコマンドでディレクトリ・ファイルの使用量を調べる方法|--max-depthやsortとの組み合わせも ~ Apacheのログが肥大化していないか確認する
無料の「Linuxサーバー構築入門マニュアル(図解60ページ)」をプレゼントしています。
Apacheの基本を押さえたら、次はWebアプリケーションが動く本格的なサーバー構築を体系的に学べます。ぜひ受け取ってみてください。
無料マニュアルを受け取る >>
<PR>手元に置いて学びを深める1冊
まず無料メルマガで基礎を固めながら、Ubuntu上でApacheを動かす手順を体系的に学びたい方は本書も合わせてどうぞ。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

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