Apacheで複数のドメインを一つのサーバーで運用する際に必要となる「マルチドメイン設定」について詳しく解説します。
これは、バーチャルホスト(Virtual Host)というApacheの機能を活用し、複数の異なるウェブサイトを同一のIPアドレス上で動作させる技術です。
マルチドメイン設定は、コスト削減や運用効率の向上に寄与し、小規模から中規模のウェブサイト運営者にとって非常に有用です。特に、リソースを共有しつつドメインごとに異なるサイトを提供したい場合に適しています。
本記事では、httpd.confを編集してマルチドメイン環境を構築する方法をステップバイステップで解説します。
具体的には、バーチャルホストの基本設定からSSLの導入、エラー発生時のトラブルシューティングまで詳しく取り上げます。
このガイドを通じて、初心者でも簡単にマルチドメイン環境を構築できるようになります。
マルチドメインとは?概要とメリット
マルチドメインとは、一台のサーバーで複数の異なるドメインを運用する方法です。Apacheの「バーチャルホスト」機能を活用し、複数のウェブサイトを同じサーバー環境で提供できます。
マルチドメインの仕組み
バーチャルホストは、リクエストされたドメイン名に応じて異なるコンテンツを提供する仕組みです。たとえば、example.com
とtest.com
という二つのドメインを、一つのApacheサーバーでホストできます。リクエスト時にApacheがドメイン名を識別し、適切なディレクトリやファイルを配信します。
マルチドメインのメリット
- コスト削減
一台のサーバーで複数のサイトを運用できるため、サーバーのコストを削減できます。追加のサーバーを用意する必要がありません。 - 管理の簡素化
複数のドメインを一括で管理できるため、運用の負担が軽減されます。Apacheの設定を一元化し、効率的な運用が可能です。 - リソースの最適化
サーバーリソースを複数のサイトで共有できるため、リソースを無駄なく活用できます。トラフィックが少ないサイト同士であれば、サーバーの負荷を分散できます。 - スケーラビリティ
新しいドメインやサイトを追加する際も簡単に設定が可能です。httpd.confに新しいバーチャルホストを記述するだけで、迅速に拡張できます。
マルチドメインは、コストと効率のバランスを取りながらウェブサイトを拡張できる理想的な方法です。次のセクションでは、具体的にマルチドメインを構築するための準備と前提条件を解説します。
必要な前提条件と環境構築
Apacheでマルチドメインを設定するためには、いくつかの前提条件を満たしておく必要があります。これにより、スムーズにバーチャルホスト設定が行えます。
前提条件
- Apacheのインストール
Apacheがサーバーにインストールされていることが必須です。まだインストールされていない場合は、以下のコマンドでインストールを行います。
CentOS/RHELの場合:
sudo yum install httpd
Ubuntu/Debianの場合:
sudo apt update
sudo apt install apache2
- ドメインの取得とDNS設定
運用したい複数のドメインを取得し、それぞれのDNS設定でサーバーのIPアドレスを指定しておきます。AレコードやCNAMEレコードの設定が必要です。
例:
example.com → 192.168.1.100
test.com → 192.168.1.100
- 静的IPアドレスの設定
マルチドメイン環境では、サーバーが静的IPアドレスを持っている必要があります。動的IPアドレスの場合、ドメインが意図しないサーバーに向かう可能性があるため注意が必要です。
Apacheの基本構成の確認
- Apacheの稼働確認
以下のコマンドでApacheが稼働していることを確認します。
sudo systemctl status httpd # CentOS/RHEL
sudo systemctl status apache2 # Ubuntu/Debian
「active (running)」と表示されていれば、Apacheは正常に動作しています。稼働していない場合は、以下のコマンドで起動します。
sudo systemctl start httpd # CentOS/RHEL
sudo systemctl start apache2 # Ubuntu/Debian
- ファイアウォール設定
Apacheが外部からのリクエストを受け付けられるよう、ファイアウォールを設定します。
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload
必要なディレクトリの作成
各ドメイン用のディレクトリを作成し、それぞれのサイトのコンテンツを配置します。
sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/test.com/public_html
作成したディレクトリにHTMLファイルなどのコンテンツを設置しておきます。
これでマルチドメイン設定の準備が整いました。次はhttpd.confを編集し、バーチャルホストの設定に進みます。
httpd.confの場所と編集方法
Apacheでマルチドメインを設定するためには、httpd.conf
ファイルを編集してバーチャルホストの設定を追加する必要があります。このセクションでは、httpd.conf
の場所を確認し、適切に編集する方法を解説します。
httpd.confの場所
httpd.conf
はApacheのメイン設定ファイルで、通常は以下のパスに配置されています。
- CentOS/RHEL系:
/etc/httpd/conf/httpd.conf
- Ubuntu/Debian系:
/etc/apache2/apache2.conf
(ただし、sites-available
でバーチャルホストを管理)
Ubuntu/Debianでは直接apache2.conf
を編集せず、個別のバーチャルホスト設定ファイルを作成します。
httpd.confの編集方法
- バックアップの作成
設定を変更する前に、httpd.conf
のバックアップを作成します。
sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak
- httpd.confを開く
任意のテキストエディタでhttpd.conf
を開きます。
sudo vi /etc/httpd/conf/httpd.conf # CentOS/RHEL
sudo nano /etc/apache2/sites-available/000-default.conf # Ubuntu/Debian
- バーチャルホスト設定のための編集準備
ファイル内で以下の行がコメントアウトされていないか確認します。もしコメントアウトされていたら、#
を削除して有効にします。
#Include conf/extra/httpd-vhosts.conf
この行がない場合は、手動でバーチャルホスト設定を追加する必要があります。
バーチャルホスト設定ファイルの作成 (Ubuntu/Debianの場合)
Ubuntuではsites-available
ディレクトリ内に新規で設定ファイルを作成します。
sudo nano /etc/apache2/sites-available/example.com.conf
以下のようにバーチャルホストの基本構成を記述します。
<VirtualHost *:80>
ServerAdmin admin@example.com
DocumentRoot /var/www/example.com/public_html
ServerName example.com
ServerAlias www.example.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
作成した設定ファイルを有効化します。
sudo a2ensite example.com.conf
sudo systemctl reload apache2
これで、httpd.confの編集準備が整いました。次は具体的なバーチャルホストの設定を追加していきます。
バーチャルホストの設定手順
バーチャルホスト(Virtual Host)を設定することで、Apacheが複数のドメインやサブドメインを1台のサーバーで管理できるようになります。ここでは、具体的にhttpd.confを編集し、複数のドメインを追加する手順を解説します。
バーチャルホストの基本構成
バーチャルホストの設定は、<VirtualHost>
ディレクティブを使って記述します。これにより、異なるドメインごとにドキュメントルートやエラーログなどを個別に設定できます。
設定例: 2つのドメインを設定
example.com
とtest.com
の2つのドメインを設定する場合の例を紹介します。
- httpd.confにバーチャルホスト設定を追加
httpd.confまたはvhostsファイルを開きます。
sudo nano /etc/httpd/conf.d/vhosts.conf # CentOS/RHEL系
sudo nano /etc/apache2/sites-available/example.com.conf # Ubuntu/Debian系
- 設定内容を記述
以下のように記述します。
<VirtualHost *:80>
ServerAdmin admin@example.com
DocumentRoot /var/www/example.com/public_html
ServerName example.com
ServerAlias www.example.com
ErrorLog /var/log/httpd/example.com-error.log
CustomLog /var/log/httpd/example.com-access.log combined
</VirtualHost>
<VirtualHost *:80>
ServerAdmin admin@test.com
DocumentRoot /var/www/test.com/public_html
ServerName test.com
ServerAlias www.test.com
ErrorLog /var/log/httpd/test.com-error.log
CustomLog /var/log/httpd/test.com-access.log combined
</VirtualHost>
各項目の説明
- VirtualHost *:80 – すべてのIPアドレスでポート80のリクエストを受け付けます。
- ServerAdmin – サーバー管理者のメールアドレスです。エラー時に表示されます。
- DocumentRoot – ドメインごとのルートディレクトリのパスです。ここにHTMLやPHPなどのファイルを配置します。
- ServerName – リクエストされたドメインを指定します。
- ServerAlias – サブドメインやwww付きのドメインを指定します。
- ErrorLog – エラーログの保存場所です。
- CustomLog – アクセスログの保存場所です。
ディレクトリの作成と権限設定
ドキュメントルートとなるディレクトリを作成します。
sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/test.com/public_html
適切な権限を付与します。
sudo chown -R apache:apache /var/www/example.com/public_html
sudo chown -R apache:apache /var/www/test.com/public_html
設定の反映
編集が完了したら、Apacheをリロードして設定を反映させます。
sudo systemctl reload httpd # CentOS/RHEL
sudo systemctl reload apache2 # Ubuntu/Debian
これで複数のドメインを同一サーバーで運用するためのバーチャルホスト設定が完了しました。次は、ネームベースのバーチャルホスト設定について詳しく説明します。
ネームベースのバーチャルホスト設定
ネームベースのバーチャルホストは、1つのIPアドレスで複数のドメインを運用する方法です。これにより、IPアドレスの節約が可能になり、効率的なサーバー運用が実現します。リクエストされたドメイン名によって、適切なサイトが提供される仕組みです。
ネームベースバーチャルホストの仕組み
ネームベースのバーチャルホストは、ApacheがHTTPリクエストヘッダーに含まれるHost
フィールドを確認し、対応するバーチャルホストを選択します。これにより、同じIPアドレスで複数のドメインを管理できるようになります。
設定手順
- httpd.confの編集
httpd.conf
またはvhosts.conf
を開きます。
sudo nano /etc/httpd/conf/httpd.conf # CentOS/RHEL系
sudo nano /etc/apache2/apache2.conf # Ubuntu/Debian系
- ネームベースのバーチャルホストを有効化
次の行がコメントアウトされていないか確認し、必要に応じて追加します。
NameVirtualHost *:80
- バーチャルホストの記述例
複数のドメインを同じIPアドレスで設定します。
<VirtualHost *:80>
ServerAdmin admin@example.com
DocumentRoot /var/www/example.com/public_html
ServerName example.com
ServerAlias www.example.com
</VirtualHost>
<VirtualHost *:80>
ServerAdmin admin@test.com
DocumentRoot /var/www/test.com/public_html
ServerName test.com
ServerAlias www.test.com
</VirtualHost>
設定のポイント
- NameVirtualHost *:80
ネームベースのバーチャルホストを使用するためのディレクティブです。すべてのIPアドレスでポート80のリクエストを受け付けます。 - ServerName
リクエストを識別するためのドメイン名です。 - ServerAlias
www.example.com
のように、サブドメインや代替ドメインを指定します。 - DocumentRoot
ドメインごとに異なるディレクトリを指定します。
優先順位とデフォルトホスト
最初に記述されたバーチャルホストがデフォルトホストとして扱われます。該当するホストが見つからない場合、このバーチャルホストが応答します。
<VirtualHost *:80>
DocumentRoot /var/www/default/public_html
ServerName default
</VirtualHost>
動作確認
設定が完了したらApacheをリロードします。
sudo systemctl reload httpd # CentOS/RHEL
sudo systemctl reload apache2 # Ubuntu/Debian
ブラウザでexample.com
やtest.com
にアクセスし、それぞれ適切なページが表示されるか確認してください。
ネームベースのバーチャルホストは、IPアドレスを節約しつつ、多数のサイトを1台のサーバーで運用するのに最適な方法です。次は、SSLを利用したマルチドメイン設定について解説します。
SSLを利用したマルチドメイン設定
SSLを使ったマルチドメイン設定は、複数のドメインをHTTPSで保護し、安全な通信を提供するために不可欠です。Apacheでは、VirtualHost
ディレクティブを活用してドメインごとにSSL証明書を適用できます。ここでは、Let’s Encryptを使った無料のSSL証明書でマルチドメインを設定する方法を解説します。
必要な準備
- Apacheのインストール(すでに完了している前提)
- Let’s EncryptのCertbotツール
以下のコマンドでCertbotをインストールします。
sudo yum install certbot python3-certbot-apache # CentOS/RHEL系
sudo apt install certbot python3-certbot-apache # Ubuntu/Debian系
SSL証明書の取得と適用
- CertbotでSSL証明書を取得
次のコマンドで複数のドメインに対してSSL証明書を取得します。
sudo certbot --apache -d example.com -d www.example.com -d test.com -d www.test.com
-d
オプションで複数のドメインを指定できます。- Certbotが自動でApacheのSSL設定を行います。
- バーチャルホストの確認
Certbotが自動でSSL用のバーチャルホストを作成しますが、必要に応じて手動で調整します。
<VirtualHost *:443>
ServerAdmin admin@example.com
DocumentRoot /var/www/example.com/public_html
ServerName example.com
ServerAlias www.example.com
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
<VirtualHost *:443>
ServerAdmin admin@test.com
DocumentRoot /var/www/test.com/public_html
ServerName test.com
ServerAlias www.test.com
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/test.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/test.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
SSL設定項目の解説
- SSLEngine on
SSLを有効にするためのディレクティブです。 - SSLCertificateFile
SSL証明書のパスを指定します。 - SSLCertificateKeyFile
秘密鍵のパスを指定します。 - Include /etc/letsencrypt/options-ssl-apache.conf
Let’s Encryptが推奨するSSL設定を自動で読み込みます。
強制的にHTTPSへリダイレクト
HTTPでアクセスされた場合に自動でHTTPSへリダイレクトする設定も追加します。
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect permanent / https://example.com/
</VirtualHost>
Apacheの再起動と動作確認
すべての設定が完了したら、Apacheを再起動して反映させます。
sudo systemctl reload httpd # CentOS/RHEL
sudo systemctl reload apache2 # Ubuntu/Debian
ブラウザでhttps://example.com
やhttps://test.com
にアクセスし、SSL証明書が正しく適用されているか確認します。
証明書の自動更新設定
Let’s Encryptの証明書は90日間で期限が切れるため、自動更新を設定します。
sudo certbot renew --dry-run
--dry-run
で更新のテストを行い、問題がなければ自動更新が機能します。
これで、SSLを利用した安全なマルチドメイン環境が構築されました。次は、Apacheのリロード方法と設定の確認について解説します。
Apacheのリロードと設定確認方法
マルチドメイン設定を完了した後は、Apacheをリロードして設定を反映させる必要があります。また、設定に誤りがないかを事前に確認することで、エラーを未然に防げます。このセクションでは、Apacheのリロード方法と設定ファイルのチェック手順について解説します。
Apacheの設定をチェックする
Apacheには、設定ファイルの文法や記述ミスを確認するコマンドがあります。設定変更後は、必ず以下のコマンドで確認してください。
sudo apachectl configtest # CentOS/RHEL系
sudo apache2ctl configtest # Ubuntu/Debian系
- 正常な場合:
Syntax OK
- 設定ミスがある場合:
エラーの内容が表示されます。httpd.conf
やバーチャルホストの設定ファイルを再確認し、修正します。
Apacheのリロード
設定が正しいことを確認したら、Apacheをリロードして新しい設定を適用します。
sudo systemctl reload httpd # CentOS/RHEL系
sudo systemctl reload apache2 # Ubuntu/Debian系
リロードは、Apacheのプロセスを停止せずに設定のみを再読み込みします。ダウンタイムを防ぎたい場合に便利です。
Apacheの再起動
大きな設定変更を行った場合は、リロードではなく再起動を行います。
sudo systemctl restart httpd # CentOS/RHEL系
sudo systemctl restart apache2 # Ubuntu/Debian系
再起動はApacheのプロセスを一度停止し、再度起動するため、短時間のダウンタイムが発生します。
動作確認
リロードまたは再起動後、ブラウザで各ドメインにアクセスし、正しく表示されるか確認します。
http://example.com
https://example.com
エラーが発生した場合は、エラーログを確認します。
sudo tail -f /var/log/httpd/error_log # CentOS/RHEL系
sudo tail -f /var/log/apache2/error.log # Ubuntu/Debian系
設定が反映されない場合の対処法
- ポートが開いているか確認
ファイアウォールがポート80(HTTP)や443(HTTPS)をブロックしていないか確認します。
sudo firewall-cmd --list-all # CentOS/RHEL
sudo ufw status # Ubuntu/Debian
必要に応じてポートを開放します。
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload
- SELinuxの確認(CentOS/RHELの場合)
SELinuxが原因でアクセスが制限されている可能性があります。
sudo setenforce 0 # 一時的に無効化
恒久的に無効化する場合は/etc/selinux/config
を編集し、SELINUX=disabled
に変更します。
これで、Apacheのリロードと設定の確認方法が完了しました。次は、設定エラー時のトラブルシューティングについて解説します。
トラブルシューティングとエラーログの確認
Apacheのマルチドメイン設定では、細かな記述ミスや設定の不備が原因で正しく動作しないことがあります。このセクションでは、よくあるエラーの原因とその解決方法、エラーログを活用したトラブルシューティングについて解説します。
よくあるエラーと解決方法
- バーチャルホストが反映されない
- 原因:
ServerName
の指定が間違っている、またはNameVirtualHost
が未設定。 - 解決方法:
NameVirtualHost *:80
をhttpd.conf
またはvhosts.conf
に追加します。
また、バーチャルホストのServerName
が正しく設定されているか確認してください。
ServerName example.com
- ポートが開放されていない
- 原因: ファイアウォールでポート80や443がブロックされている。
- 解決方法:
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload
Ubuntuではufw
を使って以下のコマンドを実行します。
sudo ufw allow 80
sudo ufw allow 443
- SSL証明書の適用エラー
- 原因: 証明書のパスが間違っている、または証明書が期限切れ。
- 解決方法: 証明書のパスが正しいか確認し、必要に応じてLet’s Encryptで再取得します。
sudo certbot renew
- 403 Forbiddenエラー
- 原因: ドキュメントルートのパーミッションが適切でない。
- 解決方法:
sudo chown -R apache:apache /var/www/example.com/public_html
sudo chmod -R 755 /var/www/example.com
SELinuxが原因の場合は以下で確認します。
sudo setenforce 0
エラーログの確認
Apacheのエラーログを確認することで、問題の原因を特定できます。
- エラーログの場所
/var/log/httpd/error_log # CentOS/RHEL
/var/log/apache2/error.log # Ubuntu/Debian
リアルタイムでログを確認するには次のコマンドを使います。
sudo tail -f /var/log/httpd/error_log
- よくあるエラーメッセージ例
AH00558: apache2: Could not reliably determine the server's fully qualified domain name
解決方法: ServerName
をhttpd.conf
に追加します。
ServerName example.com
AH00037: Symbolic link not allowed or link target not accessible
解決方法: シンボリックリンクが許可されていない場合は、以下をバーチャルホスト内に追加します。
<Directory "/var/www/example.com/public_html">
Options FollowSymLinks
AllowOverride All
</Directory>
バーチャルホストの設定ミスを見つけるコマンド
Apacheの設定ミスを検出するコマンドは以下の通りです。
sudo apachectl configtest # CentOS/RHEL系
sudo apache2ctl configtest # Ubuntu/Debian系
- エラーがない場合:
Syntax OK
- エラーがある場合: エラーメッセージを参考に該当箇所を修正します。
ドメインの名前解決ができない場合
ドメインが正しく解決されない場合は、DNSの設定ミスが考えられます。次のコマンドでDNSを確認します。
dig example.com
正しいIPアドレスが返ってこない場合は、DNSのAレコードを確認してください。
これでApacheの設定ミスやエラーを迅速に特定し、解決する方法がわかります。次は、記事のまとめを行います。
まとめ
本記事では、Apacheを使用してマルチドメイン環境を構築する方法を解説しました。
マルチドメイン設定は、コスト削減や効率的なサーバー運用を可能にし、複数のドメインを1台のサーバーで管理する強力な手段です。バーチャルホストの基本設定から、SSLを利用した安全な通信の実装、設定エラー時のトラブルシューティングまで、ステップごとに詳しく説明しました。
重要なポイントは次の通りです。
- バーチャルホスト設定を活用して複数のドメインを一つのApacheサーバーで運用可能。
- SSL証明書を導入することで、セキュアなマルチドメイン環境を構築。
- エラーログや設定チェックコマンドを活用し、エラーを迅速に特定して解決。
設定の反映後は、必ず動作確認を行い、正しく各ドメインが表示されることを確認しましょう。
これにより、安全で効率的なWebサーバー運用が実現します。
コメント