せかいろぐ

ほぼ自分用備忘録

nginxとTomcatの連携

nginxとTomcatを連携させるには?


nginxのリバースプロキシ機能を使います。具体的には、nginxに以下の様な設定をします。(Tomcatの待機ポート8080の場合)

server {
    ....
    location / {
        proxy_pass  http://localhost:8080/;
    }
    ....
}


この設定ならなんの問題もないのですが、例えば以下の様な設定の場合

    location /abc {
        proxy_pass  http://localhost:8080/edf/;
    }


Tomcatから発行されたCookieのpathが/edfとなるのですが、実際にアクセスしているアドレスはhttp://hoge.com/abcであるため、Cookieが送られず正しい処理ができません。そこで以下のようにします。(Cookieやセッション機能を使わないなら問題は無いです)

    location /abc {
        proxy_pass         http://localhost:8080/edf/;
        proxy_cookie_path  /abc/ /edf/;
    }


これでTomcatからpathが/edfとして発行されたCookieのpathが/abcに変換され、正しく処理出来ます。


また、サーブレットIPアドレスを取得して記録・・・みたいなことをしていると、全てnginx(localhost)からのアクセスとして記録されてしまいます。そこで、アクセス元IPをX-Real-IPやX-Forwarded-Forなどのヘッダにのせ、チェックしてやる必要があります。

    location /abc 
        proxy_pass         http://localhost:8080/edf/;
        proxy_cookie_path  /abc/ /edf/;
        proxy_set_header   X-Forwarded-For $remote_addr;
    }