2020年11月1日更新
今回は、同一サーバ上で、URLによってコンテンツをだし分ける方法を解説します。
同じサーバ上で、ちょっと経路の違うコンテンツA、コンテンツBと違うコンテンツを出しわけたい状況はちょくちょくあると思います。その場合、Apacheにvirtualhostを指定することで、URL(サブドメイン)を利用して、コンテンツをだし分けることができます。

1. サブドメインとは
サブドメインとは、「独自ドメイン」を分割するためにサーバ上で任意で設定するドメイン名のことを言います。例えば図2のように、独自ドメインの前につけるものをサブドメインといいます。

URLやドメインについての詳しい説明は下記の記事を参考にしてみてください。
独自ドメイン(domain)は、インターネット上で唯一のサーバなどを特定するために付けられるため、世界に1つだけのものであり、取得に申請が必要です。また、数千円程度ですが、維持費もかかります。
一方で、サブドメインの方は、独自ドメインの所有者が自由に設定することができます。例えば、僕の場合は「ino-shika-cho.com」という独自ドメインを取得しています。そしてこのサイトには「www」というサブドメインを指定して、公開しています。(wwwはインターネット上に公開するコンテンツによく利用されます)
他の例を確認してみると、例えばYahooなどは下記の様にサブドメインを活用してコンテンツを公開しています。
- www.yahoo.co.jp:ヤフージャパンのホームページ
- shopping.yahoo.co.jp:ヤフーショッピング
- auctions.yahoo.co.jp:ヤフーオークション
2.独自ドメインの取得とIPアドレスの紐付け
独自ドメインを取得して、IPアドレスと紐付ける必要があります。独自ドメインの取得のメリットや方法は下記で解説しています。
取得後は、サーバのIPアドレスと取得したドメインを紐づける必要があります。
3.DocumentRootの設定方法
まずは、サブドメインの設定の前に、メインで表示するコンテンツの場所を指定します。メインコンテンツの場所をDocument Rootと呼びます。
Apacheの設定ファイル「 /etc/httpd/conf/httpd.conf」を修正します。下記の通り、Document Rootを指定する箇所がありますので、指定したいコンテンツに変更します。
vi /etc/httpd/conf/httpd.conf
#変更前
DocumentRoot "/var/www/html" #デフォルトのディレクトリ
#変更後
DocumentRoot "/var/www/html/main/public" #メインコンテンツのディレクトリ
4.Virtualhostの設定方法
まずはVirtualhostを受け付ける、IPアドレスとポートを「 /etc/httpd/conf/httpd.conf」で有効化します。
Listen 80
NameVirtualHost *:80
次に、サブコンテンツを表示するために、Virtualhostを設定します。「httpd.conf」の中に直接記載しても良いのですが、量が増えてくると、編集が大変になりますので、別ファイル「virtualhost.conf」を作って指定します。
cd /etc/httpd/conf.d
touch virtualhost.conf
「virtualhost.conf」の中で表示したいサブコンテンツを指定します。ここではサブコンテンツとして「sub1」ディレクトリ 配下のコンテンツと「sub2」ディレクトリ 配下のコンテンツを指定します。
#sub1のコンテンツを指定
<VirtualHost *:80>
DocumentRoot /var/www/html/sub1/public
ServerName sub1.ino-shika-cho.com
<Directory "/var/www/html/sub1/public">
Require all granted
AllowOverride All
</Directory>
</VirtualHost>
#sub2のコンテンツを指定
<VirtualHost *:80>
DocumentRoot /var/www/html/sub2/public
ServerName sub2.ino-shika-cho.com
<Directory "/var/www/html/sub2/public">
Require all granted
AllowOverride All
</Directory>
</VirtualHost>
5.Apacheの再起動
設定が終わったらApacheを再起動することで、それぞれのURLで別々のコンテンツに振り分けることができます。
$systemctl restart httpd