Webサーバと intra-mart Accel Platform 間でロードバランスを行いながら連携を行う設定例を紹介します。
以下の手順を参考として、各種要件・ご利用の環境に合わせて環境構築を行ってください。
Apache HTTP Server を使用している場合
はじめに
ここでは Apache のロードバランス機能を利用し、Webサーバと intra-mart Accel Platform の連携を行う場合の設定例を紹介します。
前提条件
「静的ファイルの配置」および「アクセスログの編集」の設定が終わっていることとします。
設定手順はApache HTTP Server を参照してください。
モジュールの取得
本ドキュメントでは以下の Apache モジュールを利用します。
取得に当たっては、Apacheの各マニュアルなどを参照してください。
- mod_proxy
- mod_rewrite
- mod_headers
- mod_proxy_balancer
- mod_slotmem_shm (Apache 2.4 以降の場合)
- mod_lbmethod_byrequests (Apache 2.4 以降の場合)
- mod_proxy_wstunnel
手順
以降の手順では下記の環境を想定した手順を記載します。
コンテキストパス | imart |
apacheのドキュメントルート | /usr/local/apache/htdocs |
静的ファイルの展開フォルダ | /usr/local/apache/htdocs/imart |
ロードバランスするサーバー1のIPアドレス | 192.168.1.1 |
ロードバランスするサーバー1のポート番号 | 8080 |
ロードバランスするサーバー2のIPアドレス | 192.168.1.2 |
ロードバランスするサーバー2のポート番号 | 8080 |
- <%APACHE_HOME%/conf/httpd.conf> ファイルを開きます。
- Dynamic Shared Object (DSO) Support エリアに以下の設定を追加またはコメントアウトを外してください。
123456LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_http_module modules/mod_proxy_http.soLoadModule rewrite_module modules/mod_rewrite.soLoadModule headers_module modules/mod_headers.soLoadModule proxy_balancer_module modules/mod_proxy_balancer.soLoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so - Apache 2.4 以降を使用している場合、Dynamic Shared Object (DSO) Support エリアに以下の設定を追加またはコメントアウトを外してください。
12LoadModule slotmem_shm_module modules/mod_slotmem_shm.soLoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so - 末尾に以下の設定を追加してください。
12345678910111213141516171819202122232425262728293031323334353637383940AllowEncodedSlashes OnRewriteEngine OnRewriteCond %{REQUEST_URI} !^/imart/reverse_proxy/RewriteCond %{REQUEST_URI} ^/imart/(.*\.gif|.*\.GIF)$ [OR]RewriteCond %{REQUEST_URI} ^/imart/(.*\.png|.*\.PNG)$ [OR]RewriteCond %{REQUEST_URI} ^/imart/(.*\.jpg|.*\.JPG)$ [OR]RewriteCond %{REQUEST_URI} ^/imart/(.*\.jpeg|.*\.JPEG)$ [OR]RewriteCond %{REQUEST_URI} ^/imart/(.*\.css|.*\.CSS)$ [OR]RewriteCond %{REQUEST_URI} ^/imart/(.*\.js|.*\.JS)$ [OR]RewriteCond %{REQUEST_URI} ^/imart/(.*\.swf|.*\.SWF)$ [OR]RewriteCond %{REQUEST_URI} ^/imart/(.*\.ico|.*\.ICO)$ [OR]RewriteCond %{REQUEST_URI} ^/imart/(.*\.svg|.*\.SVG)$ [OR]RewriteCond %{REQUEST_URI} ^/imart/(.*\.json|.*\.JSON)$ [OR]RewriteCond %{REQUEST_URI} ^/imart/(.*\.jar|.*\.JAR)$ [OR]RewriteCond %{REQUEST_URI} ^/imart/(.*\.xml|.*\.XML)$ [OR]RewriteCond %{REQUEST_URI} ^/imart/(.*\.yaml|.*\.YAML)$ [OR]RewriteCond %{REQUEST_URI} ^/imart/(.*\.txt|.*\.TXT)$ [OR]RewriteCond %{REQUEST_URI} ^/imart/(.*\.html|.*\.HTML|.*\.htm|.*\.HTM)$RewriteRule ^/imart/(.*)?$ /imart/$1Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGEDBalancerMember http://192.168.1.1:8080/imart route=app-0 loadfactor=50BalancerMember http://192.168.1.2:8080/imart route=app-1 loadfactor=50ProxySet failonstatus=502BalancerMember ws://192.168.1.1:8080/imart route=app-0 loadfactor=50BalancerMember ws://192.168.1.2:8080/imart route=app-1 loadfactor=50ProxySet stickysession=ROUTEID failonstatus=502ProxyPreserveHost OnProxyPass /imart/ balancer://appservers/ lbmethod=byrequests nocanon stickysession=ROUTEIDProxyPassReverse /imart/ balancer://appservers/ nocanonRewriteCond %{HTTP:Connection} Upgrade [NC]RewriteCond %{HTTP:Upgrade} websocket [NC]RewriteRule ^/imart/(.*)?$ balancer://wsservers/$1 [P,L] - Apache を再起動してください。
Internet Information Services(IIS) を使用している場合
はじめに
ここでは IIS のサーバーファーム機能を利用し、Webサーバと intra-mart Accel Platform の連携を行う場合の設定例を紹介します。
前提条件
IIS の設定が終わっていることとします。
設定手順はInternet Information Services(IIS) を参照してください。
手順
以降の手順では下記の環境を想定した手順を記載します。
intra-mart Accel Platform のコンテキストパス | imart |
IIS のルート ディレクトリ | C:\inetpub\wwwroot |
静的ファイルの展開フォルダ | C:\imart |
ロードバランスする Resin サーバ1の IP アドレス | 192.168.1.1 |
ロードバランスする Resin サーバ1のポート番号 | 8080 |
ロードバランスする Resin サーバ2の IP アドレス | 192.168.1.2 |
ロードバランスする Resin サーバ2のポート番号 | 8080 |
- web.config から下記の設定を取り除きます。
123456789101112131415<rewrite><rules><clear></clear><rule name="ReverseProxyInboundStatic" stopprocessing="true"><match url="^imart/(.*\.gif|.*\.png|.*\.jpg|.*\.css|.*\.js|.*\.swf|.*\.ico|.*\.json|.*\.jar|.*\.xml|.*\.yaml|.*\.txt|.*\.html|.*\.htm)$"><action type="None"></action></match></rule><rule name="ReverseProxyInboundDynamic" stopprocessing="true"><match url="^imart/(.*)"><action type="Rewrite" url="http://192.168.1.1:8080/imart/{R:1}"></action></match></rule></rules></rewrite>
これにより、web.config の内容は以下のようになります。
1234567891011121314<configuration><system.web><httpruntime maxrequestlength="102400" requestpathinvalidcharacters=""></httpruntime><customerrors mode="Off"></customerrors></system.web><system.webserver><security><requestfiltering><requestlimits maxallowedcontentlength="104857600"></requestlimits></requestfiltering></security><httperrors errormode="Detailed"></httperrors></system.webserver></configuration> - Server Farms のサブメニューより「Create Server Farm...」をクリックします。
- 「Server farm name」に「appservers」を設定し、「次へ」をクリックします。
- 「Server address」に「192.168.1.1」を設定し、「Advanced settings」をクリックします。
- 「applicationRequestRouting」の「httpPort」を「8080」に設定し、「Add」をクリックします。
- 同様に「192.168.1.2」を登録します。
- 「終了」をクリックします。
- サーバーファームへのリライトルールを自動で作成するかと聞かれます。本ドキュメントでは手動で作成するため、「いいえ」をクリックします。
- インターネット インフォメーション サービス (IIS) マネージャー より「IIS サーバ(ここでは WIN-QDQ41RVOU80)」「URL 書き換え」「機能を開く」の順にクリックします。
- 「規則の追加」をクリックします。
- 「空の規則」、「OK」をクリックします。
- 以下のように設定し、「適用」をクリックします。
名前 ReverseProxyInboundStatic 要求された URL パターンに一致する 使用 正規表現 パターン 123^imart/(.*\.gif|.*\.png|.*\.jpg|.*\.css|.*\.js|.*\.swf|.*\.ico|.*\.json|.*\.jar|.*\.xml|.*\.yaml|.*\.txt|.*\.html|.*\.htm)$
※コピー&ペーストする場合は、改行コードを外し1行にしてください。大文字と小文字を区別しない チェックする アクションの種類 なし 後続の規則の処理を停止する チェックする - 同様に、以下の規則を設定します。
名前 ReverseProxyInboundDynamic 要求された URL パターンに一致する 使用 正規表現 パターン ^imart/(.*)
大文字と小文字を区別しない チェックする アクションの種類 サーバー ファームにルーティング スキーム http:// サーバー ファーム appservers パス /imart/{R:1} 後続の規則の処理を停止する チェックする - 「appservers」の「Server Affinity」設定画面を開きます。
- 「Client affinity」をチェックし、「適用」をクリックします。
- IIS を再起動してください。
ご返信いただきありがとうございます。
サイト個別に書き換え規則を設定しようとしたところ、ReverseProxyInboundDynamicのアクションの種類で「サーバーファームにルーティング」が表示されず選択できませんでした。「書き換え」で設定したところ、サイト全体に設定していた時のソース(IISのApplicationHost.config)と同じだったのですが、IISマネージャからは設定が異なるようにみえるので、こちらの設定で問題ないか懸念しています。何かアドバイス等いただければ幸いです。
複数のサイトを同時にオープンすることには成功しています。
丸木様
コメントありがとうございます。
丸木様が試されている方法ですと、サーバーファームを作成せず代わりに複数サイトを作成しているかと思われるため、ReverseProxyInboundDynamic の設定時にサーバーファームはご指摘の通り表示されないと思われます。
本ブログで ReverseProxyInboundDynamic に対して行っている設定は、ステップ2~7にて IIS に登録した複数サーバー(これをサーバーファームと呼びます)にルーティング(ロードバランス)する設定例でございます。
複数サイトへ振り分ける場合、ご認識の通り一般的には「書き換え」で設定を行うことになるかと思われます。
IIS の ApplicationHost.config と IIS マネージャーの設定が異なるように見える件につきましては、IIS マネージャーから見える設定が有効となっている認識でよいかと思います。
以上、よろしくお願いします。
ご返信いただきありがとうございます。
つまり、現在は「書き換え」になっているため、複数サーバー(サーバーファーム)へルーティング(ロードバランス)する設定になっていない認識でよろしいでしょうか。
当初は本ブログご記載の通り、複数のサーバ(サーバーファーム)にルーティングする設定をしていました。しかし、上記例ではサイト全体にルーティング規則が設定されるので、サイト個別毎に振り分ける(たとえば、Aサイトはサーバファームにルーティングする設定で、Bサイトは書き換え規則なし)設定にできないものでしょうか。
#上手く伝わっておらず申し訳ございません
やりたいこと(例)
Aサイト:サーバファームでルーティング(複数台のAPサーバへ割り振る)
Bサイト:規則なし
*両サイトは同時オープン
しかし、現状は以下のようになっている(?)
Aサイト:書き換え(サーバファームにルーティングしているわけではない)
Bサイト:規則なし
コメントありがとうございます。
intra-mart側の制限は特にございませんので、サイト毎等、ご自由にURL書き換えを設定していただいて問題ありません。
また何かご不明点がありましたら遠慮無くご連絡くださいませ。
以上、よろしくお願いいたします。
いつも当ブログ参考にさせていただいております。
早速ですが、上記IISを使用する場合について以下質問させていただけますでしょうか。
手順9でIIS全体にURL書き換え規則を設定されていますが、
こちらの設定はサイト毎に設定することは可能でしょうか?
(intra-martの制限等で、書き換え規則をサイト毎に記載できない、
または設定が有効にならない等はございますでしょうか)
複数のサイトを同時(URL書き換え規則ありのサイトと、書き換え規則なしのサイトを同時)にオープンしたいと考えています。