Ubuntu環境、ApacheとTomcatのAJPを使わない連携。
リバースプロキシの設定。
関連ページ
ApacheとTomcatの連携方法は色んな所で紹介されてるものの、AJPを使った連携が多い。
ただAJPは以前にはセキュリティの脆弱性が指摘されていたり、実際にAJPを使った連携をしたところcssの読み込みがおかしくなったりしたので、AJPを使わない連携方法を探していた。
結論から言うとAJPを使わなくてリバースプロキシだけで連携は可能だった。
必要なModuleの確認とインストール
必要なModuleがインストールされているか確認する。
今回必要になるのは、
proxy_module
、
proxy_http_module
、
ssl_module
の3つ。
下のコマンドでインストール済みModuleを確認できる。
ssl_moduleに関しては存在しない場合がある。その時は下のコマンドを打ち込む。
今回のリバースプロキシの設定ではLoadModuleコマンドを使って上の3つのModuleを有効化する必要がある。
/etc/apache2/mods-avaliableに移動すると、Module一つ一つに対応したLoadModuleコマンドを記したファイル群が確認できる。
cd /etc/apache2/mods-avaliable
proxy_moduleに対応したコマンドを確認してみる。ファイル名は
proxy.load
になる。
ファイル内で
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
というコマンドが確認できる。
同様に
proxy_http.load
と
ssl.load
も確認。一覧は次のようになる。
VirtualHostの中身を確認
Ubuntu環境だと、デフォルトのVirtualHost設定は/etc/apache2/sites-availableの下の
000-default.conf
と
default-ssl.conf
で行っている。
名前からすると000-default.confが全般的なVirtualHost設定、default-ssl.confはSSL認証に関するVirtualHost設定に見える。
今回はSSL認証も一緒にやるのでdefault-ssl.confをいじる。
sites-availableに移動。
cd /etc/apache2/sites-available
viコマンドでファイルを開く。
中をざっと見ると、ポート443接続(https接続)の時の処理が書かれているのが分かる。
<VirtualHost
*:443>
ServerAdmin
[管理者のメールアドレス]
DocumentRoot
/var/www/html
#
Available
loglevels:
trace8,
...,
trace1,
debug,
info,
notice,
warn,
#
error,
crit,
alert,
emerg.
#
It
is
also
possible
to
configure
the
loglevel
for
particular
#
modules,
e.g.
#LogLevel
info
ssl:warn
ErrorLog
${APACHE_LOG_DIR}/error.log
CustomLog
${APACHE_LOG_DIR}/access.log
combined
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
VirtualHostは、同じポート設定、同じIPアドレスの接続でも、ドメインによって遷移を分けられる。
1つのサーバしかなくても、ドメインを複数取得して複数のサイトを運営でき、その根元の部分をApacheで管理できる。(素晴らしい)
VirtualHostを編集する
とりあえず今回の作業に邪魔なので、すでにdefault-ssl.confに書かれているコードは全て#でコメントアウトさせる。
コメントアウトした下に、新しいVirtualHostの設定を書きこむ。
例としてこのサイト、
unity-engineer.top
のドメインを対象とする場合こうなる。
#確認したLoadModuleコマンドを打ち込む
LoadModule
proxy_module
/usr/lib/apache2/modules/mod_proxy.so
LoadModule
proxy_http_module
/usr/lib/apache2/modules/mod_proxy_http.so
LoadModule
ssl_module
/usr/lib/apache2/modules/mod_ssl.so
#http接続ならこっちの遷移を通る。
<VirtualHost
*:80>
DocumentRoot
/var/www/
ServerName
unity-engineer.top
ErrorLog
/var/log/apache2/unity-engineer.top.error.log
CustomLog
/var/log/apache2/unity-engineer.top.access.log
combined
ProxyRequests
Off
ProxyPass
/
http://unity-engineer.top:
[Tomcatのhttpポート設定]
/
[Tomcatのwebapps下サイトディレクトリ]
ProxyPassReverse
/
http://unity-engineer.top:
[Tomcatのhttpポート設定]
/
[Tomcatのwebapps下サイトディレクトリ]
</VirtualHost>
#https接続ならこっちの遷移を通る。サイトのSSL認証が済んでいる必要がある。
<VirtualHost
*:443>
DocumentRoot
/var/www/
ServerName
unity-engineer.top
ErrorLog
/var/log/apache2/unity-engineer.top.error.log
CustomLog
/var/log/apache2/unity-engineer.top.access.log
combined
SSLEngine
on
SSLProtocol
all
-SSLv2
SSLCertificateFile
[unity-engineer.top の cert.pem(SSLサーバー証明書)の path]
SSLCertificateKeyFile
[unity-engineer.top の privkey.pem(秘密鍵)の path]
SSLCertificateChainFile
[unity-engineer.top の chain.pem(中間証明書)の path]
ProxyRequests
Off
SSLProxyEngine
On
ProxyPass
/
https://unity-engineer.top:
[Tomcatのhttpsポート設定]
/
[Tomcatのwebapps下サイトディレクトリ]
ProxyPassReverse
/
https://unity-engineer.top:
[Tomcatのhttpsポート設定]
/
[Tomcatのwebapps下サイトディレクトリ]
</VirtualHost>
同じポート接続でも、ドメインが違えば遷移も分かれる。
例として
unity-engineer.top
と
english-everyday.top
で見てみる。
#unity-engineer.topのhttp接続ならこっちの遷移
<VirtualHost
*:80>
DocumentRoot
/var/www/
ServerName
unity-engineer.top
ErrorLog
/var/log/apache2/unity-engineer.top.error.log
CustomLog
/var/log/apache2/unity-engineer.top.access.log
combined
ProxyRequests
Off
ProxyPass
/
http://unity-engineer.top:
[Tomcatのhttpポート設定]
/
[Tomcatのwebapps下サイトディレクトリ]
ProxyPassReverse
/
http://unity-engineer.top:
[Tomcatのhttpポート設定]
/
[Tomcatのwebapps下サイトディレクトリ]
</VirtualHost>
#english-everyday.topのhttp接続ならこっちの遷移
<VirtualHost
*:80>
DocumentRoot
/var/www/
ServerName
english-everyday.top
ErrorLog
/var/log/apache2/english-everyday.top.error.log
CustomLog
/var/log/apache2/english-everyday.top.access.log
combined
ProxyRequests
Off
ProxyPass
/
http://english-everyday.top:
[Tomcatのhttpポート設定]
/
[Tomcatのwebapps下サイトディレクトリ]
ProxyPassReverse
/
http://english-everyday.top:
[Tomcatのhttpポート設定]
/
[Tomcatのwebapps下サイトディレクトリ]
</VirtualHost>
編集が終わったら、保存して閉じる。
一応default-ssl.confとsslの有効化をコマンドからしておく。(既に実行されてるなら必要ない)
a2ensite default-ssl
a2enmod ssl
Apacheを再起動して完了。
sudo service apache2 restart
0
0