質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

1回答

2134閲覧

リバースプロキシでのサーバー振り分けについて

natsumikan

総合スコア9

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2018/08/19 14:45

前提・実現したいこと

apacheのリバースプロキシを利用して、サービスIDによりサーバーを振り分けたい。

説明

現在、以下のリクエストをapacheのリバースプロキシの設定により、
2台のtomcatサーバーに振り分けをしています。

http://www.hoge.jp/BarServer/Test?service_id=******&talk_type=1
→ 192.168.1.15:8009 or 192.168.1.16:8009

confファイル

<VirtualHost *:80>
ServerName www.hoge.jp
Header add Set-Cookie "ST_CRM_ROUTEID=.%{BALANCER_WORKER_ROUTE}e;path=/;" env=BALANCER_ROUTE_CHANGED

<Proxy balancer://foo_cluster>
BalancerMember ajp://192.168.1.15:8009/BarServer route=test01-st loadfactor=100 lbset=0
BalancerMember ajp://192.168.1.16:8009/BarServer route=test02-st loadfactor=100 lbset=0
ProxySet stickysession=ST_CRM_ROUTEID
</Proxy>
<Location /BarServer>
Order Deny,Allow
Allow from all
ProxyPass balancer://foo_cluster
</Location>

</VirtualHost>

この状態のまま、特定のサービスIDだけは、振り分けるサーバーを固定したい。
例:http://www.hoge.jp/BarServer/Test?service_id=AAAaaa&talk_type=1 → ajp://192.168.1.15:8009/
http://www.hoge.jp/BarServer/Test?service_id=BBBbbb&talk_type=1 → ajp://192.168.1.16:8009/

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

mod_rewrite を使うといいと思います。
クエリ文字列を RewriteCond で条件付け、RewriteRule で一方のサーバーに振り分けます。
この際、リダイレクトにならないよう、[P|proxy] フラグを付けます。

(設定例) RewriteEngine On RewriteCond %{QUERY_STRING} service_id=AAAaaa RewriteRule ^/BarServer/Test ajp://192.168.1.15:8009//BarServer/Test [P,L] RewriteCond %{QUERY_STRING} service_id=BBBbbb RewriteRule ^/BarServer/Test ajp://192.168.1.16:8009//BarServer/Test [P,L]

投稿2018/08/20 09:00

TaichiYanagiya

総合スコア12141

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

natsumikan

2018/08/20 13:14

ご回答、ありがとうございます。 現在、夏季休暇で帰省中です。 22日以降に確認しますので、しばらくお待ちいただけますか。 よろしくお願いいたします。
natsumikan

2018/08/22 12:23

本日、設定をして希望通りに振り分け出来たことを確認しました。 ありがとうございます。
natsumikan

2018/09/08 10:25

先日は、ありがとうございました。 1つのサービス環境では、振り分けに成功しました。 別のサービス環境に設定したのですが、振り分けに失敗しています。 既存のmod_rewrite設定が影響することは、ありますか。 以下になります。 RewriteMap baz txt:conf/extra/conf/baz_hosts RewriteCond %{REQUEST_URI} ^/BarServer/FugaFuga RewriteCond %{REMOTE_ADDR} ^(\d+).(\d+).(\d+).(\d+)$ RewriteCond ${baz:%1.%2.%3.%4|DENY} !=ALLOW RewriteCond ${baz:%1.%2.%3.|DENY} !=ALLOW RewriteCond ${baz:%1.%2.|DENY} !=ALLOW RewriteRule ^ - [F,L] この記述の上に振り分け設定をしましたが、振り分けできません。 よろしくお願いいたします。
CHERRY

2018/09/08 12:36

Rewrite のログをとってどこでも引っかかっているかを確認する必要があると思います。
natsumikan

2018/09/08 13:12

ありがとうございます。 httpd.conf に LogLevel warn rewrite:trace8 を設定してありますが、ログがありませんでした。 Apache/2.4.26 です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問