しかし、今回はバーチャルドメイン環境の片方のドメインのみSSLの適用というタスクがあった。
まあ、今までと変わらないだろうという何気ない気持ちだったのだが、ちょっと勝手が違ったのでメモ。
せっかくなので、バーチャルドメインの設定から記録しよう。
まず、バーチャルドメインとは
1台のサーバ(もしくは1つのIPアドレス)に複数のドメインを割り当て、同時に異なるサービスを提供すること。
今回の設定例は以下
WEBサーバー: Apache2.2.8
IPアドレス:192.168.0.XX
ドメイン1:www.aaa.jp
ドメイン2:www.bbb.jp
で、www.aaa.jp は、動的ページでTomcatと連携。www.bbb.jp は、静的ページ。
では、早速バーチャルドメインの設定。
1、apacheの配置ファイルの修正(httpd.conf)
・ServerAdminをコメントにする。
# ServerAdmin: Your address, where problems with the server should be
# e-mailed. This address appears on some server-generated pages, such
# as error documents. e.g. admin@your-domain.com
#
ServerAdmin you@example.com
↓↓↓↓↓↓↓↓↓
#ServerAdmin you@example.com
・ServerNameをコメントにする。
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
ServerName www.example.com:80
↓↓↓↓↓↓↓↓↓
#ServerName www.example.com:80
・DocumentRoot再配置。
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/usr/local/apache2/htdocs"
↓↓↓↓↓↓↓↓↓
#DocumentRoot "/usr/local/apache2/htdocs"
DocumentRoot "/usr/local/apache2/hoge" ←好きなフォルダーを指定
・Directory "/usr/local/apache2/htdocs"部をすべてコメントにする。
<Directory "/usr/local/apache2/htdocs">
……
</Directory>
↓↓↓↓↓↓↓↓↓
#<Directory "/usr/local/apache2/htdocs">
#……
#</Directory>
・Directory部を再配置
# 以下を追加する
# 基本ホームパージ「http://127.0.0.1/」を表示されないようにするには以下dumyを追加する
<Directory "/usr/local/apache2/hoge/dummy">
Options FollowSymLinks Includes
AllowOverride None
Order allow,deny
Allow from all
</Directory>
# 基本ドメインのフォルダー設定
<Directory "/usr/local/apache2/hoge/web1">
Options FollowSymLinks Includes ExecCGI MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
# 第2ドメインのフォルダー設定
<Directory "/usr/local/apache2/hoge/web2">
Options FollowSymLinks Includes ExecCGI MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
・HostnameLookupsを有効にする。
# 以下を追加する
# ログファイルのIPアドレス部をホストの名前で保存する為
HostnameLookups On
・ScriptAliasをコメントにする。
# ScriptAlias: This controls which directories contain server scripts.
# ScriptAliases are essentially the same as Aliases, except that
# documents in the target directory are treated as applications and
# run by the server when requested rather than as documents sent to the
# client. The same rules about trailing "/" apply to ScriptAlias
# directives as to Alias.
#
ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
↓↓↓↓↓↓↓↓↓
#ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
・Directory "/usr/local/apache2/cgi-bin"部をすべてコメントにする。
<Directory "/usr/local/apache2/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
↓↓↓↓↓↓↓↓↓
#<Directory "/usr/local/apache2/cgi-bin">
# AllowOverride None
# Options None
# Order allow,deny
# Allow from all
#</Directory>
・LanguagePriorityを配置する
# 文字化け防止にjaを先頭に移動する
# LanguagePriorityが配置されていない場合は、下記内容を追加。
LanguagePriority ja en da nl et fr de el it ko no pl pt pt-br ltz ca es sv tw
・AddDefaultCharsetをコメントにする。
#文字化け対策でコメントにする
#AddDefaultCharset ISO-8859-1
・AddHandlerを再配置
#コメントを解除し .pl を追加する
# これを解除する事によりcgiプログラムが使用出来る様になる
#AddHandler cgi-script .cgi
↓↓↓↓↓↓
AddHandler cgi-script .cgi .pl
・NameVirtualHostを再配置
# IPアドレスを記入する
# NameVirtualHostが配置されていない場合は、下記内容を追加。
NameVirtualHost 192.168.0.XXX:80
・VirtualHostを配置
# 以下を追加する
<VirtualHost 192.168.0.XXX:80>
ServerAdmin root@dummy.com
DocumentRoot /usr/local/apache2/hoge/dummy
ServerName www.dummy.com
ErrorLog logs/dummy-error_log
CustomLog logs/dummy-access_log common
</VirtualHost>
# 動的ページのサービス部(Tomcatと連携している)
<VirtualHost 192.168.0.XXX:80>
ServerAdmin you@aaa.jp
ServerName www.aaa.jp
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
ServerAlias www.aaa.jp
ServerAlias aaa.jp
ErrorLog logs/aaa.jp-error_log
CustomLog logs/aaa.jp-access_log common
</VirtualHost>
<VirtualHost 192.168.0.XXX:80>
ServerAdmin you@bbb.jp
DocumentRoot /usr/local/apache2/hoge/web2
ServerName www.bbb.jp
ServerAlias www.bbb.jp
ServerAlias bbb.jp
ErrorLog logs/bbb.jp-error_log
CustomLog logs/bbb.jp-access_log common
</VirtualHost>
2、フォルダー、htmlファイルを用意する。
[root@localhost /]# cd /usr/local/apache2/
[root@localhost apache2]# mkdir hoge
[root@localhost apache2]# cd hoge
[root@localhost e-shop]# mkdir dummy
[root@localhost e-shop]# mkdir web1
[root@localhost e-shop]# mkdir web2
dummyには、空のindex.htmlを、web2には静的ページを配置
3、apacheの配置ファイルのチェック(httpd.conf)
[root@localhost /]# /usr/local/apache2/bin/apachectl configtest
Syntax OK ←この様に表示すればOK
以上で、バーチャルホストの設定は完了!!
不要な設定も多々あるかもしれないが、今回はこのような設定で実現出来た。
ここからが、表題の設定。ちょっと、長くなったな。。。
4、SSLの設定
今回の目的は、www.aaa.jpのみSSLを適用すること。
・NameVirtualHostの追記
# IPアドレスを記入する
# NameVirtualHostが配置されていない場合は、下記内容を追加。
NameVirtualHost 192.168.0.XXX:80
NameVirtualHost 192.168.0.XXX:443 ←追記
・URLを判定して自動的にSSLを適用する設定
動的ページのサービス部にmod_rewriteの設定追記。
(LoadModule rewrite_module modules/mod_rewrite.soを有効にしておくこと)
# 動的ページのサービス部(Tomcatと連携している)
<VirtualHost 192.168.0.XXX:80>
ServerAdmin you@aaa.jp
ServerName www.aaa.jp
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
ServerAlias www.aaa.jp
ServerAlias aaa.jp
ErrorLog logs/aaa.jp-error_log
CustomLog logs/aaa.jp-access_log common
<IfModule mod_rewrite.c> ←追記
RewriteEngine On
RewriteLog "logs/rewrite_log"
RewriteLogLevel 0
## URLにsslが含まれていれば、通信プロトコルを変更する。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^/(.*)/ssl/(.*)$ https://%{HTTP_HOST}/$1/ssl/$2 [L,R]
</IfModule>
</VirtualHost>
・SSL設定ファイルを有効にする
# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf
・httpd-ssl.confにてデフォルト値をNameVirtualHostの設定値に変更する。
サーバー名、プロキシパスなどを適したものに変更。
#<VirtualHost _default_:443>
<VirtualHost 192.168.0.XXX:443>
ServerName www.aaa.jp:443
ServerAdmin you@aaa.jp
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
ServerAlias www.aaa.jp
ServerAlias aaa.jp
ErrorLog "/usr/local/apache2/logs/aaa.jp-error_log"
TransferLog "/usr/local/apache2/logs/aaa.jp-access_log"
……
・作成した、key , crt などを設定する。key, crtは指定パスに配置してあること。
# Server Certificate:
# Point SSLCertificateFile at a PEM encoded certificate. If
# the certificate is encrypted, then you will be prompted for a
# pass phrase. Note that a kill -HUP will prompt again. Keep
# in mind that if you have both an RSA and a DSA certificate you
# can configure both in parallel (to also allow the use of DSA
# ciphers, etc.)
SSLCertificateFile "/usr/local/apache2/conf/aaa.jp.crt"
#SSLCertificateFile "/usr/local/apache2/conf/server-dsa.crt"
# Server Private Key:
# If the key is not combined with the certificate, use this
# directive to point at the key file. Keep in mind that if
# you've both a RSA and a DSA private key you can configure
# both in parallel (to also allow the use of DSA ciphers, etc.)
SSLCertificateKeyFile "/usr/local/apache2/conf/aaa.jp.key"
#SSLCertificateKeyFile "/usr/local/apache2/conf/server-dsa.key"
以上の設定で、aaa.jpのみSSLの適用が無事に行えた。