Jettyで動いている複数のアプリをNginxで1サイトのパスに紐付ける
背景
- 訳あって複数のアプリをJettyのプロセスを分けて動かしてます。
- 1アプリ=1Jettyプロセスになっていて複数のアプリがあります。理由があってやってるのでこれはしかたがない。
- そうするとポート番号がいっぱい増えて分かりにくいので80番にまとめたい。
- まあ、オンプレのシステムなんですけどね・・・。
- こんな感じ
http://example.com:8081/context/ → http://example.com/context/1/ http://example.com:8082/context/ → http://example.com/context/2/ http://example.com:8083/context/ → http://example.com/context/3/
設定でハマった所
- Nginxのリバースプロキシを設定するときにproxy_passのところでJettyのContextPathとlocationのパスが違ってもいいのかと思っていたんですが、どうも合わせないと上手く動きませんでした。
- rewriteとか使えば別のやり方でもいけるのかもしれないですが、できればrewriteはあんまり使いたくないし。
Nginxの設定
- 元々のJettyのContextPathと違う値なので注意。(後でJettyの設定でこちらに合わせる)
http { upstream context_1 { server 127.0.0.1:8081; } upstream context_2 { server 127.0.0.1:8082; } upstream context_3 { server 127.0.0.1:8083; } server { location /context/1/ { proxy_pass http://context_1/context/1/ proxy_redirect default; } location /context/2/ { proxy_pass http://context_2/context/2/ proxy_redirect default; } location /context/3/ { proxy_pass http://context_3/context/3/ proxy_redirect default; } }
Jettyの設定
- ContextPathをNginxの設定に合わせる。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd"> <Configure class="org.eclipse.jetty.webapp.WebAppContext"> <Set name="contextPath">/context/1</Set> <Set name="resourceBase"><Property name="jetty.webapps" default="."/>/context</Set> </Configure>
- この設定を全部のJettyにしておく。
これでやりたいことが出来ました!(書くとたいしたことないけど結構ハマったのだ)