今回は、1台のサーバで複数のブログを公開する方法ということで、Apacheのバーチャルホスト設定について説明します。
※以下の環境を例に説明します。
- サーバOS:CentOS6
- WEBサーバ:Apache2.2
目次
1.バーチャルホストとは
「バーチャルホスト」とは、1台のサーバで複数のドメインを処理するための技術です。
バーチャルホストには、「IPベースのバーチャルホスト」と「名前ベースのバーチャルホスト」があります。
通常、VPSを契約するとサーバ1台、IPアドレス1つを利用できるようになりますが、そのサーバのIPアドレス1つに複数のブログのURLを紐づけたい場合、「名前ベースのバーチャルホスト」を使います。
バーチャルホストの設定を行うことで、1台のサーバでURLが異なる複数のブログを公開できるようになります。
本記事では、以下のURLのブログ①②を1台のサーバで公開するための設定について説明していきます。
- ブログ①: http://blog1.com
- ブログ②: http://blog2.net
※ブログ①②の独自ドメインの取得・設定については、以下の記事を参考にして下さい。

2.ドキュメントルート構成
「ドキュメントルート」とは、WEBサーバが外部に公開する第一階層のフォルダのことです。
1台のサーバで複数のブログを公開する場合、このドキュメントルートを公開するブログごとに準備します。
本記事では、ブログ①②について、以下のディレクトリをドキュメントルートとすることを例に説明します。
- ブログ①: /var/www/blog1/public
- ブログ②: /var/www/blog2/public
ドキュメントルート配下にブログの記事や画像のファイルを配置することで、ブログを外部に公開することができます。
上記のドキュメントルート構成とするメリットは、ブログ①②について、以下のディレクトリを個別の非公開領域とすることができる点です。
- ブログ①: /var/www/blog1
- ブログ②: /var/www/blog2
別の記事で説明しますが、この後、ブログ①②についてWordPressをインストールします。
ブログは外部に公開したいので、以下のドキュメントルート配下にインストールします。
- ブログ①: /var/www/blog1/public
- ブログ②: /var/www/blog2/public
しかし、WordPressのデータベース接続情報などを設定する「wp-config.php」ファイルについては、外部に公開したくないため非公開領域となる以下のディレクトリに配置します。
- ブログ①: /var/www/blog1
- ブログ②: /var/www/blog2
3.ドキュメントルートのディレクトリ作成
それでは、ブログ①②を公開するためのドキュメントルートのディレクトリを作成していきましょう。
① まず、サーバにrootユーザでログインします。
[root@ ~]#
② ブログ①のドキュメントルートのディレクトリを作成します。
「mkdir -p /var/www/blog1/public」と入力してEnterを押します。
- 「mkdir」はディレクトリを作成するコマンドです。
- 「-p」は指定したディレクトリをサブディレクトリごと作成するオプションです。ツリー上のディレクトリを一気に作成することができます。
[root@ ~]# mkdir -p /var/www/blog1/public
③ 同様に、ブログ②のドキュメントルートのディレクトリを作成します。
[root@ ~]# mkdir -p /var/www/blog2/public
これで、ブログ①②のドキュメントルートとなるディレクトリが作成できました。
4.Apacheのバーチャルホスト設定
ドキュメントルートとなるディレクトリが作成できたら、バーチャルホストの設定を行っていきます。
4-1.バーチャルホスト設定の概要
本記事では、以下のような振る舞いをするように、バーチャルホストの設定を行います。
なお、意図しないアクセスについては、エラーとするようにしましょう。
- ブログ①:http://blog1.com にアクセス → /var/www/blog1/public 配下のコンテンツを表示
- ブログ②:http://blog2.net にアクセス → /var/www/blog2/public 配下のコンテンツを表示
- その他:上記以外にアクセス → エラーとする
4-2.httpd.confのバックアップ
バーチャルホストの設定は、「/etc/httpd/conf」フォルダ配下にある「httpd.conf」ファイル(Apacheの設定ファイル)で設定します。
「httpd.conf」ファイルを編集する前に、「httpd.conf」ファイルのバックアップを行いましょう。
① まず、サーバにrootユーザでログインします。
[root@ ~]#
② 次に、「httpd.conf」ファイルがある「/etc/httpd/conf」フォルダへ移動します。
「cd /etc/httpd/conf」と入力してEnterを押します。
[root@ ~]# cd /etc/httpd/conf
「/etc/httpd/conf」フォルダへ移動できました。
[root@ conf]#
③ 編集前の「httpd.conf」ファイルをバックアップするため、「httpd.conf」ファイルをコピーして、「httpd.conf.yyyymmdd」というファイル名で保存します。
「cp httpd.conf httpd.conf.yyyymmdd」と入力してEnterを押します。
なお、「yyyymmdd」は設定変更を行う日など任意の年月日とします。
(以下は、20170223とした例)
[root@ conf]# cp httpd.conf httpd.conf.20170223
これで、「httpd.conf」ファイルをバックアップできました。
4-3.httpd.confの編集
「httpd.conf」ファイルをバックアップできたら、「httpd.conf」ファイルを編集していきます。
① 「vim httpd.conf」と入力してEnterを押します。
[root@ conf]# vim httpd.conf
「httpd.conf」ファイルの内容が表示されます。
② 「httpd.conf」ファイル内で、「NameVirtualHost」と記載されている箇所を探します。
「/NameVirtualHost」と入力してEnterを押します。
#NameVirtualHost *:80
③ 上記②の設定から「#」(コメントアウト)を削除します。
「#」にカーソルを合わせ、「x」を入力して「#」を削除します。
NameVirtualHost *:80
④ 次に、以下の設定をコピーし、上記③の設定の下あたりに貼り付けます。
「i」を入力して編集モードに切り替え、以下の設定をコピー&ペーストして下さい。
<VirtualHost *:80> ServerName any <Location /> Order Deny,Allow Deny from all </Location> </VirtualHost> <VirtualHost *:80> ServerName blog1.com DocumentRoot "/var/www/blog1/public" DirectoryIndex index.html index.php ErrorLog /var/log/httpd/blog1_error.log CustomLog /var/log/httpd/blog1_access.log combined AddDefaultCharset UTF-8 <Directory "/var/www/blog1/public"> AllowOverride All </Directory> </VirtualHost> <VirtualHost *:80> ServerName blog2.net DocumentRoot "/var/www/blog2/public" DirectoryIndex index.html index.php ErrorLog /var/log/httpd/blog2_error.log CustomLog /var/log/httpd/blog2_access.log combined AddDefaultCharset UTF-8 <Directory "/var/www/blog2/public"> AllowOverride All </Directory> </VirtualHost>
まず、冒頭にある「ServerName any」の設定ですべてのアクセスを拒否しています。
次に、「ServerName blog1.com」「ServerName blog2.net」の設定で、ブログ①②に対するアクセスのみ許可しています。
なお、各項目では以下の内容の設定を行っています。
- ServerName: アクセス時に指定されるドメインを設定します。
- DocumentRoot: ServerNameで指定されたドメインにアクセスがあった際に公開するドキュメントルートを設定します。
- DirectoryIndex: アクセス時にファイル名まで指定されなかった場合に、暗黙的に読み込むファイル名を指定します。
- ErrorLog: ServerNameで指定されたドメインのアクセスに関するエラーログのファイルパスを設定します。
- CustomLog: ServerNameで指定されたドメインのアクセスに関するアクセスログのファイルパスを設定します。
- AddDefaultCharset: ServerNameで指定されたドメインにアクセスがあった際に公開するコンテンツのデフォルトの文字コードを設定します。
- AllowOverride: 「.htaccess」ファイルで設定可能な範囲についてディレクトリごとに設定します。設定値を「All」とすることにより、「.htaccess」ファイルで設定可能な項目はすべて有効となります。WordPressをインストールすると「.htaccess」ファイルが自動で作成されるので、AllowOverrideの設定値は「All」としておきましょう。
⑤ vimで開いた「httpd.conf」ファイルの設定を保存し、ファイルを閉じます。
Escを押し、ノーマルモードに切り替え、「:wq」と入力してEnterを押します。
:wq
4-4.httpd.confの有効化
httpd.confの編集が完了したら、設定した内容を有効化するために、Apacheを再起動します。
「service httpd restart」と入力してEnterを押します。
[root@ conf]# service httpd restart
Apacheの再起動が完了しました。
httpd を停止中: [ OK ] httpd を起動中: [ OK ]
これで、バーチャルホスト設定が有効化されました。
4-5.バーチャルホストの動作確認
バーチャルホスト設定の有効化が完了したら、バーチャルホストの動作確認を行いましょう。
① まず、ブログ①についてバーチャルホストの動作確認を行います。
以下の内容のHTMLファイルを「index.html」というファイル名で作成し、ブログ①のドキュメントルート直下に配置して下さい。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf8"> <meta name="description" content="blog1"> <title>blog1</title> </head> <body> <p id="message">blog1</p> </body> </html>
上記のHTMLファイルの配置が完了したら、作業しているPCのブラウザでブログ①のURLにアクセスして下さい。
ブラウザに「blog1」と表示されればOKです。
② 次に、ブログ②についてバーチャルホストの動作確認を行います。
ブログ①と同様の手順で動作確認を行って下さい。
③ 最後に、ブログ①②のURL以外のURLでサーバにアクセスした際の動作確認を行います。
作業しているPCのブラウザで「http://サーバのIPアドレス」にアクセスして下さい。
ブラウザに「Forbidden」のエラーが表示されればOKです。
これで、バーチャルホストの動作確認が完了しました。