Apacheにて名前ベースのバーチャルホストを設定し、Aipo + 別サイトを1台の端末でホストする

前回の記事で、ApacheとAipoのTomcatを連携させました。

今回は、Apacheの名前ベースのバーチャルホストを使って、Aipoと別のWebサイトを1台の端末でホストしてみます。
Name-based Virtual Host Support - Apache HTTP Server Version 2.4

 
目次です。

 

環境

 
なお、今回もCUIPowerShellを使うため、Apacheのコマンドの前に.\が付いています。

 

Apacheへバーチャルホスト用の設定を追加

httpd.confへの追記

バーチャルホスト用の設定はhttpd-vhosts.confで行うよう、httpd.confの末尾に追加します。

なお、前回のようにhttpd-proxy-http.confを作成している場合は、Includeディレクティブをコメントアウトor削除します。

C:\Apache24\conf\httpd.conf

# VirtualHostを使用しないmod_proxy_http向けの設定ファイルなので、コメントアウト or 削除
# Include conf/extra/httpd-proxy-http.conf

# VirtualHostの設定、この中にmod_proxy_http向けの記述も追加
Include conf/extra/httpd-vhosts.conf

 

httpd-vhosts.confの作成

Apache Lounge版バイナリでは、httpd-vhosts.confの雛形が用意されています。ただ、コメント行が多いため、一度全部消してから設定します。

VirtualHostディレクティブ以下は、前回のhttpd-proxy-http.confの設定をそのまま使っています。

C:\Apache24\conf\extra\httpd-vhosts.conf

# Virtual Hosts
NameVirtualHost *:80

<VirtualHost *:80>
    ServerName main
    
    ErrorLog "logs/aipo-error.log"

    # Reverse Proxy
    ProxyRequests Off

    # Host
    ProxyPreserveHost On

    # Aipo
    <Location "/aipo/">
        ProxyPass http://localhost:81/aipo/ retry=5
        ProxyPassReverse http://localhost:81/aipo/
    </Location>

    <Location "/">
        ProxyPass http://localhost:81/ retry=5
        ProxyPassReverse http://localhost:81/
    </Location>
</VirtualHost>

 
Apacheの構文をテストします。

PS C:\Apache24\bin> .\httpd -t
AH00548: NameVirtualHost has no effect and will be removed in the next release C:/Apache24/conf/extra/httpd-vhosts.conf:2
Syntax OK

シンタックスはOKのようですが、ワーニングが出ていました。

公式ドキュメントを読むと、日本語版と英語版で記述が異なりました。

 
アップグレードノートを見ると、

Misc Changes

・The NameVirtualHost directive no longer has any effect, other than to emit a warning. Any address/port combination appearing in multiple virtual hosts is implicitly treated as a name-based virtual host.

Upgrading to 2.4 from 2.2 - Apache HTTP Server Version 2.4

とあり、Apache2.4ではNameVirtualHostの設定が不要となったようでした。

 
そのため、先頭にあったNameVirtualHost *:80を削除し、以下の形となりました。

C:\Apache24\conf\extra\httpd-vhosts.conf

# Virtual Hosts
<VirtualHost *:80>
    ServerName main
    
    ErrorLog "logs/aipo-error.log"

    # Reverse Proxy
    ProxyRequests Off

    # Host
    ProxyPreserveHost On

    # Aipo
    <Location "/aipo/">
        ProxyPass http://localhost:81/aipo/ retry=5
        ProxyPassReverse http://localhost:81/aipo/
    </Location>

    <Location "/">
        ProxyPass http://localhost:81/ retry=5
        ProxyPassReverse http://localhost:81/
    </Location>
</VirtualHost>

 
Apacheの構文テストと、Apacheの再起動を行います。

# Apache構文テスト
PS C:\Apache24\bin> .\httpd -t
Syntax OK

# Apache再起動
PS C:\Apache24\bin> .\httpd -k restart

 
ブラウザでhttp://main/aipoへアクセスすることで、Aipoへと接続できました。

また、C:\Apache24\logs\aipo-error.logファイルもできていました。

 

別サイト作成

Aipoだけだとバーチャルホストが有効なのか分かりづらいため、もう一つの別のホストを作成してみます。

 

DNSへの登録

今回、AipoをホストしているmainのCNAMEとして、別ホストを登録します。
エイリアス (CNAME) リソース レコードをゾーンに追加する

DNSサーバの役割を持つWindows ServerのDNSマネージャーより、 前方参照ゾーン > 対象のゾーンで右クリック、 新しいエイリアス(CNAME)を選択し、以下を入力します。

項目
エイリアス vhost-example
完全修飾ドメイン名(FQDN) vhost-example.example.local (自動入力)
ターゲットホスト用の完全修飾ドメイン名(FQDN) main.example.local
同じ名前の DNS レコードすべての更新を認証されたユーザーに許可する □チェックしない

 

vhost-exampleホストの確認用HTMLファイルの作成

適当なファイルを作成します。

C:\Apache24\docs\dummy\index.html

<html>
<body>
    <h1>vhost-example, It works!</h1>
</body>
</html>

 

httpd-vhosts.confへ追記

ホストvhost-example向けの設定を追加します。

上記で作成したindex.htmlファイルがあるC:\Apache24\docs\dummyがドキュメントルートとなりますので、DocumentRootとDirectoryのディレクティブを設定します。

ただ、Directoryディレクティブは、

のどちらに書けばよいのか分かりませんでしたが、DocumentRootの近くに記述したほうが見やすいかなと考えて、今回はhttpd-vhosts.confに書きました。

また、アクセス制御の書き方がApache2.4系では変更されていることにも注意します。

 
C:\Apache24\conf\extra\httpd-vhosts.conf

念のため、全文を載せておきます。

# Virtual Hosts
<VirtualHost *:80>
    ServerName main
    
    ErrorLog "logs/aipo-error.log"

    # Reverse Proxy
    ProxyRequests Off

    # Host
    ProxyPreserveHost On

    # Aipo
    <Location "/aipo/">
        ProxyPass http://localhost:81/aipo/ retry=5
        ProxyPassReverse http://localhost:81/aipo/
    </Location>

    <Location "/">
        ProxyPass http://localhost:81/ retry=5
        ProxyPassReverse http://localhost:81/
    </Location>
</VirtualHost>

# 以下を追加
<VirtualHost *:80>
    DocumentRoot "c:/Apache24/docs/dummy"
    # DNSのCNAMEに設定したエイリアスを、ServerNameへと設定
    ServerName vhost-example
    # 分かりやすくするため、エラーログ名をAipoと異なるものを設定
    ErrorLog "logs/dummy-error.log"
    
    <Directory "c:/Apache24/docs/dummy">
        Require all granted
    </Directory>
</VirtualHost>

 
あとは構文テストと再起動を行い、

# Apache構文テスト
PS C:\Apache24\bin> .\httpd -t
Syntax OK

# Apache再起動
PS C:\Apache24\bin> .\httpd -k restart

ブラウザで http://vhost-example/へアクセスし、vhost-example, It works!と表示されることを確認します。

また、http://main/aipo/へアクセスした場合も、Aipoが表示されることを確認します。