元情報系学生なプログラマの備忘録

情報系学生だったプログラマが現場で学んだこと感じたことを書く備忘録

【intra-mart】リバースプロキシにドはまりした思い出(1)

リバースプロキシ(以下リバプロ)ってありますよね。

つまり、

https://reverse.example.com/imart

のようなURLを踏むと、リバプロの設定に従って

https://192.168.11.100/imart

のようなリクエストを代理で出し、その結果をクライアントに返してくれる仕組みです。しかしこれ(リバプロ)があるとページが表示できないことがあります。

 これは、BaseURLが正しく設定されていない為と考えられます。

 

 

f:id:s06068ss:20181207165059p:plain

リバースプロキシの動き

 

このような構成の時、挙動としては、

・ログインフォームが表示されるがレイアウトが崩れている。

・ログインボタンを押下しても、ログインできない

といった挙動を示すことがあります。

 

何が起きているか

→htmlのソースを見てみると、https://192.168.11.100のようなURLが書かれています。

(BaseURL)

ユーザはhttps://reverse.example.com/imartというURLでアクセスしているのに、html上にログイン先として書かれているのはAPサーバのIPアドレスになっています。

→CSSやjavascriptのファイルが読み込めないのでレイアウトなども崩れてしまいます。

 

 

原因のポイント:APサーバからするとクライアントの元々のリクエストは知らぬ

APサーバからすると、クライアントが出したリクエストは感知していません。

わかるのは「リバプロ」の出したリクエストしかのみです。

https://192.168.11.100/imartでアクセスされているので、

当然ログイン先のURLも https://192.168.11.100/imart/ナントカカントカだろう

ということになります。

 

修正のポイント:クライアントがアクセスしてくるURLを設定すればいい

APサーバに対してはリバプロがアクセスしており、直接のURLは

https://192.168.11.100/imartでアクセスされているが、クライアントは

https://reverse.example.com/imartでアクセスしている。

→BaseURLをhttps://reverse.example.com/imartに設定することで

ログイン先のURLも https://reverse.example.com//imart/ナントカカントカだろう

ということになります 。

 

そんなに簡単じゃない

BaseURLなら知っている知っている、server-context-config.xmlの中に設定するところがあって、これが「https://192.168.11.100/imart」になっているか、定義されていなかった直せばいいだ。

5.3.2.2. ベースURL — intra-mart Accel Platform セットアップガイド   第26版 2018-12-01  

 

 

アクセス経路が1つなら解決ですが、2つ以上あるならばそう簡単じゃありません。

ここで躓くことになります。

 

つづく