親バカエンジニアのナレッジ帳

webのエンジニアをやっており、日頃の開発で詰まったことや書き残しておきたいことを載せています。育児のイロハという育児サイト(https://ikujip.jp)の開発も行っているため、その開発で使用されている技術についても掲載しています。

NginxとTomcatでリバースプロキシ連携

なぜNginxとTomcatを連携?

Javaを動かす際のサーバ(ミドルウェア)としてTomcatはよく使われると思いますが、元々Java以外の言語を扱っていた方などは、Webサーバとしての細かい設定はApacheやNginxの方が慣れている場合がありますよね?
そんな時はURLからのアクセスをNginxやApacheで受けて、そこからリバースプロキシの設定でTomcatに連携させる方法が有効です。
基本的な設定自体はそんなに難しいものではないので、ここではその手順を記載したいと思います。

ちなみに今回はAWSのEC2サーバで行いますが、CentOS6であってもほとんど手順は同じです。

ポートの開放

まずはポートを開放し、HTTP(80)とHTTPS(443)は接続できるようにしておいてください。
AWSの場合は以下の手順になります。

ti-tomo-knowledge.hatenablog.com

他のサーバの場合でもiptablesなどでポートを開放してください。

サーバ設定

MySQLのインストール

もしMySQLを使用する場合、あらかじめ以下の手順でインストール、起動をさせておいてください。

ti-tomo-knowledge.hatenablog.com

Nginxのインストールと起動

Nginxのインストール
yum -y install nginx
confファイルを書き換えてリバースプロキシ設定

以下のようにnginx.confファイルの「location / {」直下に「proxy_pass http://localhost:8080」を追加してください。

※リバースプロキシの細かい説明は省きますが、今回の設定を簡単に言えば、URLを入力された時に(通常はポート80で来ますよね)、webサーバであるNginxからページを返すのではなく、「ポート8080でアクセスした時に返ってくるページ」を代わりに返すことができます。

vim /etc/nginx/nginx.conf
http {
    ・
    ・
    ・
    index   index.html index.htm;

    server {
        ・
        ・
        ・
        location / {
            proxy_pass http://localhost:8080
        }
        ・
        ・
    }
    ・
    ・
}
Nginxの起動・自動起動設定
service nginx start
chkconfig nginx on

JavaTomcatのインストールと起動

JavaTomcatのインストール
yum -y install java-1.8.0-openjdk-devel tomcat8 tomcat8-webapps tomcat8-docs-webapp
Javaのバージョン切り替え

以下のalternativesコマンドによってデフォルトで入っているJavaからインストールしたJavaへバージョンを切り替えてください。

alternatives --set java /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/bin/java
ソースの配置

「/var/lib/tomcat8/webapps」直下にjarファイルまたはwarファイルをアップロードしてください。

Tomcatの起動・自動起動設定

以下コマンドにより、jarファイルまたはwarファイルが展開され、Tomcatが起動されます。

service tomcat start
chkconfig tomcat on

まとめ

基本的には上記の流れでリバースプロキシの設定は完了です。
ブラウザからポート80でNginxにアクセスすれば、リバースプロキシの設定により、ポート8080のTomcatからコンテンツが配信されるようになります。

上記はあくまでも連携に必要な最低限の設定になります。
他にもSSL対応や環境変数の設定、ログ、プロファイル、セキュリティ周りの設定など、場合によってやることは様々だと思うので、随時調べながら対応してみてください。

Java+MySQL+Tomcatで始めるWebアプリケーション構築入門

Java+MySQL+Tomcatで始めるWebアプリケーション構築入門

Java+MySQL+Tomcatで始めるサーバーアプリケーション開発入門

Java+MySQL+Tomcatで始めるサーバーアプリケーション開発入門