手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 22.04 Apache 基本構築 – VirtualHost と DocumentRoot の基本

Ubuntu 22.04 で Apache を使う場合、パッケージを入れるだけでなく、DocumentRoot、VirtualHost、名前解決、ログの場所を最初に確認しておくと、TLS 化や PHP 連携へ進むときに切り分けやすくなります。

この記事では、Apache の基本構築として apache2 の導入、server.example.local 用の DocumentRoot と VirtualHost、HTTP での疎通確認までを扱います。Ubuntu 22.04 の既存環境を保守するための確認記事です。

関連する記事
この記事で確認すること
  • Apache のインストールとサービス確認
  • DocumentRoot の作成
  • VirtualHost の作成と有効化
  • 名前解決と HTTP 疎通確認
  • ログと運用時の確認点
参考
書籍
参考書籍

Advanced Ubuntu Administration and Management Best Practices

Ubuntu Server の運用項目を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。

Amazon で見る

このリンクは Amazon アソシエイトリンクです。

Apache 基本構築で確認するもの

Apache の基本構築では、サービスが起動しているかだけでなく、どの名前でアクセスさせるか、どのディレクトリを公開するか、ログをどこで見るかを決めます。

  • 公開する FQDN と名前解決
  • DocumentRoot の場所と権限
  • VirtualHost の ServerName
  • 既定サイトを残すか無効化するか
  • アクセスログとエラーログの場所

ここでは例として server.example.local を使います。実際のホスト名、IP アドレス、公開ディレクトリに置き換えてください。

Apache をインストールする

まず apache2 パッケージをインストールします。サーバー用途では、パッケージ導入後にサービス状態と待ち受けポートを確認します。

sudo apt update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y apache2
apache2 -v

サービス状態を確認する

Apache が起動していること、80 番ポートで待ち受けていること、ローカルから応答が返ることを確認します。

systemctl status apache2 --no-pager
ss -ltnp | grep ':80'
curl -I http://127.0.0.1/

ここで応答がない場合は、Apache の起動状態、ファイアウォール、ポート競合、既存の reverse proxy 構成を先に確認します。

DocumentRoot を作成する

公開用ディレクトリを作成し、確認用の index.html を置きます。後でアプリケーションを配置する場合でも、まず静的ファイルで VirtualHost の動作を確認すると切り分けが簡単です。

sudo install -d -m 0755 -o root -g root /var/www/server.example.local
sudo tee /var/www/server.example.local/index.html >/dev/null <<'EOF'
<!doctype html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>server.example.local</title>
</head>
<body>
  <h1>server.example.local</h1>
</body>
</html>
EOF
sudo find /var/www/server.example.local -maxdepth 1 -ls

VirtualHost を作成する

名前ベースの VirtualHost を作成します。ServerNameDocumentRoot を一致させ、ログファイルもサイトごとに分けます。

sudo tee /etc/apache2/sites-available/server.example.local.conf >/dev/null <<'EOF'
<VirtualHost *:80>
    ServerName server.example.local
    ServerAdmin webmaster@example.local
    DocumentRoot /var/www/server.example.local
    <Directory /var/www/server.example.local>
        Options -Indexes +FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/server.example.local-error.log
    CustomLog ${APACHE_LOG_DIR}/server.example.local-access.log combined
</VirtualHost>
EOF

AllowOverride None.htaccess による上書きを使わない構成です。WordPress などで .htaccess を使う場合は、用途に合わせて別途判断します。

サイトを有効化する

作成したサイトを有効化し、構文確認後に Apache を reload します。既定サイトを使わない場合は 000-default.conf を無効化します。

sudo a2dissite 000-default.conf
sudo a2ensite server.example.local.conf
sudo apache2ctl configtest
sudo systemctl reload apache2

reload 後に Apache の状態を確認します。構文エラーがある場合は reload が失敗し、既存の設定で動き続けることがあります。

systemctl status apache2 --no-pager
sudo journalctl -u apache2 -n 80 --no-pager

名前解決を用意する

検証環境では、DNS を用意する前に /etc/hosts で名前解決を確認できます。複数台からアクセスする場合は、DNS 側にレコードを用意します。

sudo tee -a /etc/hosts >/dev/null <<'EOF'
192.0.2.10 server.example.local
EOF
getent hosts server.example.local

HTTP で動作確認する

VirtualHost が意図した DocumentRoot を返しているか確認します。Host ヘッダーを明示すると、名前解決をまだ用意していない段階でも VirtualHost の切り分けができます。

curl -I http://server.example.local/
curl http://server.example.local/
curl -H 'Host: server.example.local' http://127.0.0.1/

別のサイトが返る場合は、ServerName、有効化されている site、Apache の VirtualHost 一覧を確認します。

apache2ctl -S
ls -l /etc/apache2/sites-enabled/

ログを確認する

アクセスログとエラーログを確認します。VirtualHost ごとにログを分けておくと、TLS 化や PHP 連携後の調査が楽になります。

sudo tail -n 20 /var/log/apache2/server.example.local-access.log
sudo tail -n 20 /var/log/apache2/server.example.local-error.log
sudo tail -n 20 /var/log/apache2/error.log

運用上の注意

  • DocumentRoot の所有者と書き込み権限を用途ごとに決める
  • .htaccess を使うかどうかをサイトごとに決める
  • VirtualHost ごとにログを分ける
  • TLS 化する前に HTTP で名前解決と DocumentRoot を確認する
  • PHP や reverse proxy を追加する前に静的ファイルで疎通を確認する

Apache は後から TLS、PHP、WAF、reverse proxy などを追加しやすい反面、問題が起きたときに原因が混ざりやすいです。基本構築では、名前、DocumentRoot、VirtualHost、ログを先に固めておくことが大切です。

まとめ

Ubuntu 22.04 の Apache 基本構築では、apache2 の導入、DocumentRoot の作成、VirtualHost の有効化、名前解決、HTTP での疎通確認を順番に見ます。ここまで確認できていれば、TLS 化や PHP 連携へ進むときの前提が明確になります。

次の段階では、内部 CA 証明書を使った HTTPS、HTTP/2、PHP 実行環境、WAF などを、用途に応じて追加していきます。

関連する記事
Ubuntu 22.04 Apache 基本構築 – VirtualHost と DocumentRoot の基本

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る