こんにちは、レムシステム株式会社のエンジニア、小村(@system_kom)です。前回の記事「AlmaLinux 9にApache httpdをインストールする手順」では、Apacheの導入からテストページの表示までを行いました。今回はその続編として、同じ環境に複数のWebサイトを1台のサーバーで運用できる「バーチャルホスト(VirtualHost)」の設定方法を、より実践的な形で解説します。
「1台のサーバーで複数のドメインを運用したい」「テスト用サイトを簡単に切り替えたい」「本番と開発を同居させたい」といった場合に非常に便利な機能です。本記事では、AlmaLinux 9+Apache 2.4の環境で、バーチャルホストを安全かつ再現性高く構築する方法を詳しく紹介します。
-
-
前回の記事【サーバー構築の基本】AlmaLinux 9でApache httpdを最短セットアップ(インストール〜基本設定〜動作確認)
こんにちは、レムシステム株式会社のエンジニア、小村(@system_kom)です。 以前にブログでCentOS 8向けの記事をアップしていますが、CentOS 8は現在、サポートが終了しているため、本記事ではエンタープライズ向けの互換ディ ...
AlmaLinux 9環境の準備と前提
まずは、今回の手順を実行するための前提条件を整理しておきます。前回の記事でApacheを導入し、http://サーバーIP/ にアクセスしてテストページが表示できる状態からスタートします。
検証環境(例)
- OS:AlmaLinux 9(最小構成)
- Apache:httpd 2.4 系(
dnf install httpdで導入) - firewalld:稼働中(80/443 を許可予定)
- SELinux:有効
- グローバルIP:例)110.5.20.185
- テストドメイン:rem-site.com / rem-site.jp
ここまでの準備が整っていれば、サーバーの基本設定は完了です。以降の手順では、設定ファイルを正しい場所に作成し、Apacheの再読み込みによって設定を反映させていきます。
Apacheの起動・ファイアウォール設定・初期表示確認
Apache httpd が稼働していない場合は、まず起動して自動起動を有効化します。これによりサーバー再起動後も自動でApacheが立ち上がります。
# systemctl enable --now httpd
# systemctl status httpd --no-pager
出力結果に active (running) が表示されていれば問題ありません。
次に、外部アクセスを許可するためのファイアウォール設定を行います。
# firewall-cmd --add-service=http --permanent
# firewall-cmd --add-service=https --permanent
# firewall-cmd --reload
ここまで完了したら、ブラウザでサーバーのIPアドレスを直接入力し、Apacheのテストページ("Testing 123...")が表示されることを確認します。これができれば、Webサーバーが正しく応答している状態です。
バーチャルホストの概要
1台のサーバーで複数のWebサイトを公開したいとき、Apacheでは「バーチャルホスト(VirtualHost)」という仕組みを使います。例えば、1つのサーバー上に rem-site.com と rem-site.jp の2つのサイトを同時に運用する場合、それぞれの設定を独立して定義できます。
| ネームベース | 1つのIPで複数ドメインを運用(一般的な方式。本記事はこちら) |
| IPベース | 各ドメインに別IPを割り当て(古い方式。現在は推奨されない) |
ネームベース方式は、1つのApacheが受け取ったHTTPリクエストの「Hostヘッダ」を見て、どの設定を適用するか判断する仕組みです。設定ミスがあると意図しないサイトが表示されるため、初期設定の順序が重要になります。
バーチャルホスト設定ファイルの作成
設定ファイルは /etc/httpd/conf.d/ 配下に配置します。ここにファイルを追加することで、Apacheの再起動時に自動で読み込まれます。
まずは「定義されていないアクセス(IP直打ちなど)」を拒否する設定を入れておきましょう。これがないと、未定義ドメインのアクセス時に意図しないサイトが表示されることがあります。
# cd /etc/httpd/conf.d/
# vi virtualhost-00.conf
<VirtualHost _default_:80>
ServerName any
<Location />
Require all denied
</Location>
</VirtualHost>
このファイルを「最初(00)」に読み込ませることで、どの設定にも該当しないリクエストを安全にブロックできます。次に、個別サイトごとの設定ファイルを作成します。
rem-site.com の設定例:
# vi /etc/httpd/conf.d/rem-site.com.conf
<VirtualHost *:80>
ServerName rem-site.com
ServerAlias www.rem-site.com
ServerAdmin webmaster@rem-site.com
DocumentRoot "/home/www/html/rem-site.com"
<Directory "/home/www/html/rem-site.com">
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog /var/log/httpd/rem-site.com-error.log
CustomLog /var/log/httpd/rem-site.com-access.log combined
</VirtualHost>
上記では、「ServerName」にメインドメイン、「ServerAlias」にサブドメイン(www)を定義しています。アクセスログとエラーログをドメイン単位で分けることで、トラブル時の原因特定が容易になります。
同様に rem-site.jp の設定も作成します。
# vi /etc/httpd/conf.d/rem-site.jp.conf
<VirtualHost *:80>
ServerName rem-site.jp
ServerAlias www.rem-site.jp
ServerAdmin webmaster@rem-site.jp
DocumentRoot "/home/www/html/rem-site.jp"
<Directory "/home/www/html/rem-site.jp">
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog /var/log/httpd/rem-site.jp-error.log
CustomLog /var/log/httpd/rem-site.jp-access.log combined
</VirtualHost>
設定を保存したら、一度Apacheの構文チェックを行いましょう。
# httpd -t
Syntax OK
ディレクトリ作成と権限設定
それぞれのサイトのコンテンツを格納するディレクトリを作成します。Apacheの実行ユーザー(通常は apache)が読み取れるよう、適切な権限を設定します。
# useradd -s /sbin/nologin www
# mkdir -p /home/www/html/rem-site.com /home/www/html/rem-site.jp
# chown -R www:www /home/www/html
# chmod -R 755 /home/www/html
さらに、SELinuxを有効にしている場合は、Apacheがこのディレクトリにアクセスできるようにポリシーを設定する必要があります。
# dnf -y install policycoreutils-python-utils
# semanage fcontext -a -t httpd_sys_content_t "/home/www(/.*)?"
# restorecon -Rv /home/www
この設定により、ApacheプロセスがSELinuxにブロックされることなくファイルを配信できるようになります。
テスト用HTML作成と確認
次に、ブラウザで確認できる簡単なHTMLファイルを配置します。ドメインごとに異なる内容を出しておくと、表示確認の際に判別しやすくなります。
# printf "rem-site.com test page\n" > /home/www/html/rem-site.com/index.html
# printf "rem-site.jp test page\n" > /home/www/html/rem-site.jp/index.html
# chown www:www /home/www/html/*/index.html
# systemctl restart httpd
# systemctl status httpd --no-pager
Apacheの再起動後、ブラウザで各ドメインにアクセスし、テキストが正しく表示されるか確認します。
DNS未設定時のhostsで確認
まだDNSが設定されていない場合でも、ローカルPCの hosts ファイルを編集することで動作確認が可能です。以下の行を追加してください。
110.5.20.185 rem-site.com www.rem-site.com
110.5.20.185 rem-site.jp www.rem-site.jp
保存後、ブラウザで http://rem-site.com や http://rem-site.jp にアクセスし、先ほど作成したテストページが表示されれば設定完了です。
運用上のポイントと安全対策
基本設定が完了したら、以下の運用ポイントも併せて確認しましょう。
- ログをドメイン単位で分け、アクセスやエラーを明確に把握する
- ファイル更新権限を限定し、管理用ユーザーとApache実行ユーザーを分離
- SELinuxは無効化せず、正しいコンテキストを設定して運用
- バックアップ・証明書更新をcronやsystemd-timerで自動化
- 本番環境では必ずHTTPS化(Let’s Encryptで自動更新)
まとめと次のステップ
本記事では、前回の記事で構築したApache環境をもとに、AlmaLinux 9でのバーチャルホスト設定を詳しく紹介しました。1台のサーバーで複数のサイトを分離して運用することで、コストを抑えつつ安全性を高められます。
この設定を基礎として、次はSSL対応(https化)やアクセス制御、バックアップの自動化などに進むとより実運用に近づきます。もし「ここまでできたけどSSLの設定で詰まった」「既存サーバーの整理もしたい」という場合は、私たちレムシステムが実際の環境を拝見しながらご提案できます。サーバー構築・移行・運用設計の無料相談も受付中です。