バーチャルホストとは
1つのサーバー内で複数のウェブサイトを公開できる技術のことです。サイトごとにサーバーを契約しなくてよいのでコスト効率が高いのが特徴です。
バーチャルホストには大きく分けて以下の2種類があります。
・名前ベースのバーチャルホスト
ApacheはHTTPリクエストのHostヘッダーを使用して、どのウェブサイトのコンテンツを提供するかを判断します。複数のドメイン名が同一のIPアドレスに関連づけられます。設定が簡単でコスト効率が良いため名前ベースのバーチャルホストが一般的です。
・IPベースのバーチャルホスト
ウェブサイトごとに異なるIPアドレスが割り当てます。Apacheはリクエストが到達したIPアドレスに基づいて、どのウェブサイトを提供するかを判断します。
Apacheのディレクトリツリー
/etc/httpd/
├── conf
│ ├── httpd.conf
│ └── magic
├── conf.d
│ ├── README
│ ├── autoindex.conf
│ ├── userdir.conf
│ └── welcome.conf
├── conf.modules.d
│ ├── 00-base.conf
│ ├── 00-dav.conf
│ ├── 00-lua.conf
│ ├── 00-mpm.conf
│ ├── 00-optional.conf
│ ├── 00-proxy.conf
│ ├── 00-systemd.conf
│ ├── 01-cgi.conf
│ ├── 10-h2.conf
│ ├── 10-proxy_h2.conf
│ └── README
├── logs -> ../../var/log/httpd
├── modules -> ../../usr/lib64/httpd/modules
├── run -> /run/httpd
└── state -> ../../var/lib/httpd
主要なディレクトリを説明します。(Red Hat系Linuxディストリビューションにおける主要なディレクトリです)
/etc/httpd/conf
Apacheの主要な設定ファイルが含まれています。httpd.confがApacheのグローバル設定ファイルです。
/etc/httpd/conf.d
メインの設定ファイルである httpd.conf とは別に、追加の設定ファイル(.confファイル)を置く場所として機能します。.confファイルは起動時に自動で読み込まれます。
今回行うバーチャルホストの設定ファイルはこのディレクトリに作成します。メインの設定ファイルであるhttpd.confに直接バーチャルホストの設定を記述することも可能ですが、管理が煩雑になりやすいので設定ファイルを分けるほうがおすすめです。
バーチャルホスト設定の手順
1Apacheをインストールする。
AWSのEC2をたててそこにApacheをインストールします。EC2をたてるまでは解説しませんのでサーバーについては各自準備していただけると幸いです。
Apacheがインストールされているか確認するコマンド
sudo systemctl status httpd
管理者権限で実行する必要があります。
・Apacheのインストール
sudo yum install httpd
・Apacheを起動する
sudo systemctl start httpd
サーバーを再起動したときなど自動でApacheが起動するように設定します。
・Apacheの自動起動設定
sudo systemctl enable httpd
2バーチャルホストの設定をする
2バーチャルホスト設定ファイルを編集する
Apacheの設定ファイル初期の設定ファイルなど
RedHat/CentOSの場合: /etc/httpd/conf/httpd.conf
デフォルトの設定は上記のファイルに設定されているようです。バーチャルホストの設定をする方法として上記ファイルを編集する方法と
以下ディレクトリに新しい設定ファイルを作成する方法があります。
/etc/httpd/conf.d/
今回は
/etc/httpd/conf/httpd.confの設定ファイルを編集する方法でバーチャルホストの設定をやってみたいと思います。
Apache 2.2 以前ではNameVirtualHostディレクティブの使用が必須でしたが、Apache 2.4以降では不要になりました。
DocumentRootはウェブサイトのファイルが格納されるディレクトリを指し、ServerNameはドメイン名を指定します。
<VirtualHost *:80>
ServerName any
DocumentRoot /var/www/html
</VirtualHost>
<VirtualHost *:80>
ServerName test
DocumentRoot /var/www/html/
</VirtualHost>
<VirtualHost *:80>
ServerName b.test
DocumentRoot /var/www/html/
</VirtualHost>
設定が終わったら以下のコマンドで設定ファイルに間違いがないかチェックします。
apachectl configtest
3表示するコンテンツを配置する
3Apacheの再起動を行います
4DNS設定の更新
初期設定ではドキュメントルートが/var/www/htmlになっています。このディレクトリに適当なHTMLを配置しましょう。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>test1</title>
</head>
<body>
<h1>test1</h1>
</body>
</html>
設定が完了したらApacheを再起動します。
sudo systemctl restart httpd
hostsファイルを編集する
今回はテストのためhostsファイルにドメイン名を登録してアクセスしてみます。
hostsファイルを設定したホストからしか、バーチャルホストで設定したサイトにアクセスすることはできません。
windowsの場合
C:\Windows\System32\drivers\etc\c