前回の記事で、ApacheとAipoのTomcatを連携させました。
今回は、Apacheの名前ベースのバーチャルホストを使って、Aipoと別のWebサイトを1台の端末でホストしてみます。
Name-based Virtual Host Support - Apache HTTP Server Version 2.4
目次です。
環境
- Windows Server 2008 x64
- Windows Server 2008 R2
- DNSの役割を持つ
- Aレコードに
main
を登録済 - CNAMEレコードに
vhost-example
をこれから追加
- Aレコードに
- Active Directoryのドメイン名は、
example.local
- DNSの役割を持つ
なお、今回もCUIはPowerShellを使うため、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.
とあり、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系では変更されていることにも注意します。
- 人間とウェブの未来 - Apache 2.4系でのモダンなアクセス制御の書き方
- Require Directive - mod_authz_core - Apache HTTP Server Version 2.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が表示されることを確認します。