Rocky Linux 9 一覧へ戻る トップRocky Linux 9 / Apacheバーチャルホスト設定手順
Rocky Linux 9 ・ Web Server

1台のサーバーで複数のWEBサイトを運営する

Apacheバーチャルホスト設定手順 — 既存サイトを維持したまま新しいドメインを追加公開する

VirtualHost SELinux httpd_sys_content_t

本ガイドでは、現在稼働しているWebサーバーに新しいドメインを追加し、それぞれ異なるウェブサイトとして同時に公開するための「バーチャルホスト」の設定手順を解説します。

目次

  1. 0. バーチャルホストとは?(仕組みの理解)
  2. 1. 設定ファイルの作成
  3. 2. ディレクトリの作成と権限設定
  4. 3. テスト用のWebページ作成
  5. 4. 設定の反映とチェック
  6. 5. 動作確認
  7. 運用のヒント(DNS設定・HTTPS化)
  8. よくある落とし穴:デフォルトVirtualHost
  9. コマンド早見表

0. バーチャルホストとは?(仕組みの理解)

バーチャルホストとは、「1台の物理サーバー(1つのIPアドレス)」の中に、複数の異なるウェブサイト(ドメイン)を同居させる技術です。アクセスしてきたユーザーが「どのドメイン名(URL)を入力したか」をApache(Webサーバーソフト)が判別し、表示するフォルダ(ディレクトリ)を自動で切り替えます。

システムイメージ(概念図)

ユーザーのブラウザ │ ├─① 「http://www.your-domain.mydns.jp」へアクセス │ ──▶ [ Apacheサーバー ] ──▶ フォルダ:/var/www/html (既存サイト) │ └─② 「http://www.virtual.host」へアクセス ──▶ [ (IP: 192.0.2.1) ] ──▶ フォルダ:/var/www/virtual.host (新規サイト)

このように、入り口は同じサーバーですが、ドメイン名によって案内する部屋(フォルダ)を変える仕組みを構築します。

1. 設定ファイルの作成

Apacheに「どのドメインが来たら、どのフォルダを見せるか」というルールを指示するための設定ファイルを作成します。既存のサイト設定を維持したまま、新しいサイトの設定を追加します。

設定ファイルの新規作成と編集

以下のコマンドを実行し、テキストエディタ(vi)で設定ファイルを開きます。

sudo vi /etc/httpd/conf.d/vhost.conf
記述する内容

以下の内容をすべてコピーして貼り付けてください。

www.virtual.host/var/www/virtual.host の部分は、実際に使用したいドメイン名やフォルダ名に書き換えても動作します。

# 既存ドメイン(www.your-domain.mydns.jp)の設定を維持します
<VirtualHost *:80>
    DocumentRoot /var/www/html
    ServerName www.your-domain.mydns.jp
</VirtualHost>

# 新規追加するバーチャルホストの設定
<VirtualHost *:80>
    DocumentRoot /var/www/virtual.host
    ServerName www.virtual.host
    ServerAdmin webmaster@virtual.host

    # エラーログとアクセスログを分けて記録します
    ErrorLog logs/virtual.host-error_log
    CustomLog logs/virtual.host-access_log combined
</VirtualHost>

# 新規ドメイン用ディレクトリの権限設定
<Directory "/var/www/virtual.host">
    Options FollowSymLinks
    AllowOverride All
</Directory>

設定項目の解説

項目意味
<VirtualHost *:80>ポート番号80(通常のHTTP接続)で届いたアクセスに対する設定の塊(ブロック)を示します。
DocumentRootホームページの実体(HTMLファイルなど)を保存するフォルダの場所を指定します。
ServerName対象となるドメイン名を指定します。この名前と合致したアクセスがこのブロックで処理されます。
ErrorLog / CustomLogこのサイト専用のログファイルを作成します。不具合が起きたときの原因究明が容易になります。
<Directory ...>指定したフォルダに対するアクセス権限(セキュリティ設定)を定義します。

入力後、Escキーを押して :wq と入力し、Enterキーを押して保存して閉じます。

2. ディレクトリの作成と権限設定

次に、ウェブサイトのデータを保存するフォルダ(ディレクトリ)を実際に作成し、インターネット経由で閲覧できるように権限を設定します。

2-1

ディレクトリの作成

新しく公開するウェブサイトのファイルを置くためのフォルダを作成します。

sudo mkdir /var/www/virtual.host
2-2

権限(パーミッション)の設定

作成したフォルダを、Webサーバー(Apache)や一般ユーザーが読み取れるように権限を設定します。

sudo chmod 755 /var/www/virtual.host

755とは:所有者(管理者)は書き込み・読み込みが可能で、それ以外のユーザー(Webサーバーなど)は読み込みと実行ができる権限です。

2-3

SELinuxのセキュリティラベル付与(重要)

Red Hat Enterprise Linux、AlmaLinux、Rocky Linuxなどでは、SELinuxという強力なセキュリティ機能が動作しています。単にフォルダを作成しただけでは、セキュリティ制限によってプログラムがフォルダにアクセスできず、サイトが表示されない(403 Forbiddenエラー)原因になります。

そのため、新しく作ったフォルダに「これはWebサイト公開用のフォルダである」というラベル(属性)を付与する必要があります。

① 必要なツールがインストールされていない場合の事前実行コマンド

(ツールが不足している場合は、先に以下のコマンドでインストールを実行してください)

sudo dnf install policycoreutils-python-utils -y
② SELinuxのルールに新しいフォルダを登録する

作成したフォルダとその配下のすべてのファイルにWeb用ラベル(httpd_sys_content_t)を割り当てる設定を登録します。

sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/virtual.host(/.*)?"
③ 設定をフォルダに実際に反映する

登録したルールをシステムに適用します。

sudo restorecon -Rv /var/www/virtual.host

3. テスト用のWebページ作成

設定が正しく完了しているかをブラウザで確認するために、簡易的なテスト用ホームページ(HTMLファイル)を作成します。

HTMLファイルの作成
sudo vi /var/www/virtual.host/index.html
記述する内容

以下の内容をコピーして貼り付けてください。

<html>
<body>
<h1 style="width: 100%; font-size: 48px; text-align: center;">
Virtual Host Test Page
</h1>
</body>
</html>

入力後、Escキーを押して :wq と入力し、Enterキーを押して保存して閉じます。

4. 設定の反映とチェック

これまでに実施した設定ファイルをApacheに読み込ませます。ただし、設定ファイルに書き間違いがあると、現在動いている既存のウェブサイトまで停止してしまうリスクがあります。そのため、必ず「チェック」を行ってから「反映」させます。

4-1

構文チェック(事前確認)

設定ファイルの記述に文法ミスがないかを確認します。

sudo apachectl configtest

画面に Syntax OK と表示されれば、記述に間違いはありません。エラーが表示された場合は、手順1の設定ファイル(vhost.conf)に打ち間違いがないか確認してください。

4-2

Apacheの設定再読み込み

チェックが通ったら、設定を反映させます。

sudo systemctl reload httpd

restart(再起動)ではなく reload(再読み込み)を使用することで、既存のアクセスを切断することなく安全に新しい設定を適用できます。

5. 動作確認

お使いのパソコンのブラウザを起動し、新しく設定したドメインにアクセスします。

アクセス先:http://www.virtual.host(またはご自身で設定したドメイン)

画面中央に大きく 「Virtual Host Test Page」 と表示されれば、バーチャルホストの追加構築は完了です。

【重要:運用のヒント】

構築した環境をインターネット上で実際に運用する際、必要となる追加の作業です。

1. DNS設定の追加

新しく追加したドメイン(例:www.virtual.host)をブラウザに入力した際に、構築したサーバーのIPアドレスに辿り着けるようにする必要があります。現在お使いのDNSサービス(MyDNS等、またはドメインを取得したレジストラ)の管理画面にて、Aレコードとして対象ドメインにサーバーのグローバルIPアドレスを紐付けてください。

DNS設定が反映される前のテスト方法(hostsファイルの利用)

まだドメインの準備ができていない段階で動作確認をしたい場合、お使いのパソコンの hosts ファイルに以下のように記述することで、自分のパソコン内だけでテストアクセスが可能です。

[サーバーのIPアドレス]  www.virtual.host

2. HTTPS化(SSL/TLS暗号化)について

現在のWeb標準では、すべてのウェブサイトにHTTPS(暗号化通信)が求められます。無料のSSL証明書発行機関である「Let's Encrypt」のツール(Certbot)を利用すると、作成したバーチャルホストに対して簡単なコマンド操作のみで自動的にSSL設定が追加されます。

SSL証明書の取得と自動設定コマンド
sudo certbot --apache

コマンドを実行すると、対話式のガイダンスが開始されます。画面の指示に従い、HTTPS化したい新ドメイン(例:www.virtual.host)を選択して進めてください。必要なApache設定の書き換えも含めて自動で処理されます。

⚠️ よくある落とし穴:デフォルトVirtualHost

複数のVirtualHostを設定する際に見落としがちな、Apacheの名前ベースバーチャルホストの重要な仕様があります。

Hostヘッダーが一致しないアクセスは「最初に読み込まれたVirtualHost」が処理する

ブラウザやツールが送信するHostヘッダーが、どのServerName/ServerAliasにも一致しない場合、Apacheは設定ファイルの中で最初に定義されたVirtualHostブロックを「デフォルト」として処理します。ファイル名のアルファベット順に読み込まれるため、vhost.conf より先に読み込まれる設定ファイル(例:sで始まるファイル名など)が存在すると、意図せずそちらがデフォルトになることがあります。

本サイトの構築でも実際に、curl http://サーバーIP/...のようにHostヘッダーを指定せずアクセスした際、想定していたサイトではなく別のVirtualHost(ファイル名の並び順で先に読み込まれていた設定)が応答し、404になるという現象が発生しました。原因の切り分けには Host ヘッダーを明示したテスト(curl -H "Host: 対象ドメイン" http://サーバーIP/...)が有効です。

コマンド早見表

操作コマンド
設定ファイル作成sudo vi /etc/httpd/conf.d/vhost.conf
ディレクトリ作成sudo mkdir /var/www/virtual.host
権限設定sudo chmod 755 /var/www/virtual.host
SELinuxラベル登録sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/virtual.host(/.*)?"
SELinuxラベル反映sudo restorecon -Rv /var/www/virtual.host
構文チェックsudo apachectl configtest
設定の安全な再読み込みsudo systemctl reload httpd
現在有効なVirtualHostの確認sudo httpd -S
HTTPS化sudo certbot --apache
Rocky Linux 9 一覧へ戻る