Tech Blog

名前ベースのバーチャルホスト設定(Apache)

2021-02-06

名前ベースのバーチャルホスト設定(Apache)を行うことにより、 1つのWebサーバーで複数のサイトが運営できます。

前提

  • CentOS7
  • Apache2.4

バーチャルホストの設定は、IPベースと名前ベースの2種類ありますが、 今回は名前ベースの設定となります。

予めDNSサーバーに設定しておいた2つのホストが割り当てられている状態で、 複数のサイトを表示出来るように設定していきます。

DNS設定

例えば、独自ドメインexample.comを所有しており、

laravel.example.comeccube4.example.comという2つのサイトを運営したい場合の設定 は以下の様になります。

(Aレコードに、123.○○○.○○○.○○○という値が予め設定されている想定となります)

エントリ名タイプデータ
@A123.○○○.○○○.○○○
laravelCNAMEexample.com.
eccube4CNAMEexample.com.

example.comのDNSのゾーン設定にCNAMEレコードを2つ追加しましょう。

設定方法

バーチャルホストの設定は、<VirtualHost>セクションディレクティブの中に記述します。

1つのWebサーバー上で1つのサイトを運営する場合は、以下のような設定となります。

/var/www/html/laravel/にLaravel、/var/www/html/eccube4にeccube4系がインストールされている想定です。)

Listen 80
 
<VirtualHost *:80>
  ServerAdmin [email protected]
  DocumentRoot /var/www/html/laravel/public
  ServerName laravel.example.com
  ErrorLog logs/laravel-error_log
  CustomLog logs/laravel-access_log common
  RewriteEngine on
  RewriteCond %{SERVER_NAME} =laravel.example.com
  RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
<VirtualHost *:80>
  ServerAdmin [email protected]
  DocumentRoot /var/www/html/eccube4
  ServerName eccube4.example.com
  ErrorLog logs/eccube4-error_log
  CustomLog logs/eccube4-access_log common
  RewriteEngine on
  RewriteCond %{SERVER_NAME} =eccube4.example.com
  RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

<VirtualHost>セクションディレクティブは、<VirtualHost *:80>となっています。

これはどのIPアドレスでも許可する設定で、IPアドレスが変わる環境ではこのような設定になります。

IPを指定する場合は、<VirtualHost 123.○○○.○○○.○○○:80>と指定します。

バーチャルホストの設定として必須項目となるのが、ServerAdminDocumentRootServerNameです。

ServerNameはサブドメインを設定しましょう。

また、DocumentRootにはアプリケーションの公開ディレクトリを指定します。

設定を反映

Apacheを再起動すると設定が反映されます。

apachectl restart