以前、AipoとIISを連携させました。
AipoのTomcatとIISがARRで連携する環境へ、Aipoを移行する - メモ的な思考的な
今回は、IIS連携からApache連携へ切り替えた時のメモを残します。
目次です。
- 環境
- Apacheのインストール
- IISのポート変更
- ARRにて、書き換えルールを無効化
- mod_proxy_ajpを使う場合の設定
- mod_proxy_httpを使う場合の設定
- ファイアウォールのポートOpen
- その他
環境
前回構築済の環境は以下の通りです。
- Windows Server 2008 x64
- Aipo 7.0.2.0
- ポート
81
で起動
- ポート
- IIS 7.0
Default Web Site
がポート80
で動作
- ARR 3.0
- URL書き換えを使い、ポート80をポート81へ書き換え
今回、Apache連携に切り替えるため、
- Aipo
- ポート81で動作
- 一応、ポート81接続も残す
- ポート81で動作
- IIS 7.0
- ポート80で動作しているサイトを、ポート8081へと移動
- ARR 3.0
- URL書き換えにおいて、Aipo向けのものは無効化
- Apache 2.4.20 32bit
- 展開先: C直下:
C:\Apache24
- VirtualHostは未使用
- 展開先: C直下:
と変更になります。
なお、IISとApacheとAipoは、Windows Server 1台にすべて同居しているものとし、コマンドライン入力にはPowerShellを使います。
などがあり、mod_proxy_http
が勧められていました。
mod_proxy_httpとmod_proxy_ajpとmod_jk — ありえるえりあ
Aipoでも上記の方法による事例がありました。
- 既存のApache上でAipoを動作させるには?|無料グループウェア「アイポ」
- apache2.2系でAipoを動作させるには?|無料グループウェア「アイポ」
- [Aipo] リバースプロキシ経由で接続する(Apache) - Life with IT
そこで今回は、mod_proxy_ajp
とmod_proxy_http
の両方の連携方法を試してみました。
Apacheのインストール
前回と同じ方法で、ダウンロード・展開・サービス登録を行います。
IISが稼働中の環境にApache2.4を入れ、ポート80をIISからApacheへと切り替える - メモ的な思考的な
IISのポート変更
IISがポート80で動作していると良くないため、前回の記事同様、ポートを変更します。
# 変更 PS C:\Apache24\bin> Set-WebBinding -Name 'Default Web Site' -BindingInformation "*:80:" -PropertyName "Port" -Value "8081" # 確認 PS C:\Apache24\bin> Get-WebBinding protocol bindingInformation -------- ------------------ http *:8081:
ARRにて、書き換えルールを無効化
以前の記事で作成した書き換えルールを無効化しておきます*1。
mod_proxy_ajpを使う場合の設定
以下を参考に、ApacheとAipoのTomcatを、mod_proxy_ajp
を使って連携します。
Apache側の設定 - Tomcatとの連携(mod_proxy_ajp) - Apache入門
httpd.confの編集
httpd.confにて、Proxy用のモジュールmod_proxy.so
、およびProxyのプロトコルとして使うモジュールmod_proxy_ajp.so
を有効化するとともに、mod_proxy_ajp用の設定ファイルをincludeします。
C:\Apache24\conf\httpd.conf
# 140行目あたり、`#`を削除して設定を有効化 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so # ファイルの最後 # `httpd-proxy-ajp`用の設定ファイルを指定 # 今回は`httpd-proxy-ajp.conf`というファイル名にする Include conf/extra/httpd-proxy-ajp.conf
mod_proxy_ajp用設定ファイル作成
mod_proxy_ajpの設定として、
/aipo/
へアクセスした時 (Aipo本体)/
へアクセスした時 (Aipo Gadgets)- apache連携をしている場合にaipoアプリが使用できない|無料グループウェア「アイポ」
http://IPアドレス:Apacheのポート番号/gadgets/js/core:rpc:shindig-container.js
で404となり、対応が必要になったため
- apache連携をしている場合にaipoアプリが使用できない|無料グループウェア「アイポ」
の2点を追加します。
AipoのTomcatでのAJP設定を確認すると、以下のファイルに記載がありました(98行目あたり)。
C:\aipo\dpl7020\tomcat\conf\server.xml
<!-- Define an AJP 1.3 Connector on port 8009 --> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
Tomcatの8009
ポートへ繋げば良さそうです。
続いて設定を行います。
ProxyRequests
については、デフォルトでOff
ですが、念のため、明示的にOffとしておきます。
mod_proxy - Apache HTTP Server Version 2.4
ProxyPassReverse
のについては、以下を読む限り、今回は不要かなと思って書きませんでした。
- mod_proxyのProxyPassReverseの意味がようやく理解できた - うまいぼうぶろぐ
- Apache 2.2.x と Tomcat の連携(1) ~mod_proxy_ajp の利用~ | UB Lab.
ProxyPass
については、Locationディレクティブを使うのが一般的なのかどうか分かりませんでしたが、今回は
- mod_proxy_ajpはProxyPassだけなので使わない
- mod_proxy_httpはProxyPassの他にProxyPassReverseもあるので、Locationディレクティブを使う
としました。
また、今回の1台構成では意味ないかもしれませんが、以下の記事を参考にretry
を設定しておきます。Apache2.4系でも同じでした。
ProxyPass には retry=?? を指定しておく - daily dayflower
ProxyPassやProxyPassReverseの挙動については、以下が参考になりました。
mod_proxy再入門 – ProxyPassとProxyPassReverse | Developers.IO
C:\Apache24\conf\extra\httpd-proxy-ajp.conf
# ProxyRequestsをOffにすることで、Apacheはリバースプロキシとして動作 ProxyRequests Off # Aipo ProxyPass /aipo/ ajp://localhost:8009/aipo/ retry=5 # Aipo Gadgets ProxyPass / ajp://localhost:8009/ retry=5
動作確認
設定ファイルの更新が終わったら、設定内容が問題ないかを確認します。
# シンタックスエラーがないかを確認 PS C:\Apache24\bin> .\httpd -t Syntax OK # モジュールが読み込まれているかを確認 PS C:\Apache24\bin> .\httpd -M Loaded Modules: ... proxy_module (shared) proxy_ajp_module (shared) ...
問題無さそうでしたので、
を行います。
なお、再起動順についてはTomcat3時代はTomcatを先に、という記載がありました。
Tomcat-Apache HOWTO
ただ、Aipo7で使っているTomcat6では
The order of starting up Tomcat and Apache is NOT important. Either apache or tomcat can be restarted at any time.
At boot, is order of start up (Apache vs Tomcat) important?
No. This way - either apache or tomcat can be restarted at any time independent of one another.
とあったことから、現在はそこまで気にする必要はないのかなと考えました。
あとは、ブラウザでhttp://localhost/aipo/
へアクセスし、Aipoが表示できればOKです。
mod_proxy_httpを使う場合の設定
Aipoがhttpのポート81で起動しているので大丈夫かと思いますが、念のため、AipoのTomcatでのhttpポート設定を確認します。
AJP同様以下のファイルに記載がありました(78行目あたり)。
C:\aipo\dpl7020\tomcat\conf\server.xml
<Connector connectionTimeout="20000" port="81" protocol="HTTP/1.1" redirectPort="8443"/>
そのため、httpd.confとmod_proxy_http用の設定ファイル作成を行います。
httpd.confの編集
mod_proxy.so
とmod_proxy_http.so
をロードし、ファイルを詠みこみます。
# モジュールのロード LoadModule proxy_module modules/mod_proxy.so ... LoadModule proxy_http_module modules/mod_proxy_http.so # 設定ファイルの読込 Include conf/extra/httpd-proxy-http.conf
mod_proxy_http用設定ファイル作成
C:\Apache24\conf\extra\httpd-proxy-http.conf
ProxyRequests Off ProxyPreserveHost On <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>
動作確認
# モジュールのロード確認 PS C:\Apache24\bin> .\httpd -M ... proxy_module (shared) proxy_http_module (shared) ... # シンタックスエラーの確認 PS C:\Apache24\bin> .\httpd -t Syntax OK
あとはApacheのサービスを再起動後、ブラウザでhttp://localhost/aipo/
へアクセスし、Aipoが表示できればOKです。
参考:Apache2.4 Windows Server 32bit - kunikuの日記
ファイアウォールのポートOpen
上記までで設定は完了です。ただ、
- ローカルからは接続できる
- 他の端末から
http://<Aipoのホスト名>/aipo
にアクセスできない
という場合、Windowsファイアウォールでポートが閉じている可能性があります。
そのため、ファイアウォールのポートを開けて動作を確認します*2。
なお、Windows7ではPowerShellのコマンドレットがないため、ファイアウォール設定ができません。
リモート デスクトップ接続をPowerShellから一括設定する~netsh advfirewallも - 元「なんでもエンジニ屋」のダメ日記
# Windows7のコマンドレットの確認 PS C:\Windows\system32> Get-Command *-*firewall* # 結果が表示されない = 存在しない PS C:\Windows\system32> # Windows10のコマンドレット確認 PS C:\Windows\system32> Get-Command *-*firewall* CommandType Name Version Source ----------- ---- ------- ------ Function Copy-NetFirewallRule 2.0.0.0 NetSecurity Function Disable-NetFirewallRule 2.0.0.0 NetSecurity Function Enable-NetFirewallRule 2.0.0.0 NetSecurity ...
その他
mod_proxy_ajpとmod_proxy_httpについては、以下の記事などを読んだものの、現時点ではどちらの方がいいのか判断できませんでした。そのため、今回両方を試しています。
- Deciding between mod_jk, mod_proxy_http and mod_proxy_ajp | TomcatExpert
- apache 2.2 - mod_proxy vs mod_proxy_ajp vs mod_jk - Server Fault
- FAQ/Connectors - Tomcat Wiki
- apache to tomcat: mod_jk vs mod_proxy - Stack Overflow
- Mladen Turk's Blog: Comparing mod_proxy and mod_jk | JBoss Developer
- Java And Related: mod_jk, mod_proxy and mod_proxy_ajp
- Apache を経由して 80番ポートで Tomcat 6 に接続できるようにする - make world
- Glassfish Apacheとの連携 (mod_proxy_http) - @//メモ