nginxとjettyの連携

jettyはpure javaのWebサーバ、サーブレット。spdyやwebsocketも対応。nginxからtomcatという連携もあるが、ならapache使えよと思わなくもないのでjettyにしてみた。

jetty

http://download.eclipse.org/jetty/ からリリース版をダウンロードしてインストール。

$ wget http://download.eclipse.org/jetty/9.2.9.v20150224/dist/jetty-distribution-9.2.9.v20150224.tar.gz
--2015-03-27 08:38:23--  http://download.eclipse.org/jetty/9.2.9.v20150224/dist/jetty-distribution-9.2.9.v20150224.tar.gz
download.eclipse.org をDNSに問いあわせています... 198.41.30.199
download.eclipse.org|198.41.30.199|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 13471366 (13M) [application/x-gzip]
`jetty-distribution-9.2.9.v20150224.tar.gz' に保存中

100%[======================================>] 13,471,366  1.64M/s 時間 15s     

2015-03-27 08:38:38 (902 KB/s) - `jetty-distribution-9.2.9.v20150224.tar.gz' へ保存完了 [13471366/13471366]

$ zcat ../jetty-distribution-9.2.9.v20150224.tar.gz | tar xvf -
$ mv jetty-distribution-9.2.9.v20150224/ dist
$ cd dist
$ cd demo-base
$ ls
etc  lib  resources  start.d  start.ini  webapps
[kohchi@localhost demo-base]$ java -jar ../start.jar
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/eclipse/jetty/start/Main : Unsupported major.minor version 51.0
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:643)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
	at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
Could not find the main class: org.eclipse.jetty.start.Main. Program will exit.
$

とエラーがでる。javaのバージョンがまずい。

$ cat /etc/redhat-release 
CentOS release 6.5 (Final)
$ rpm -qa |grep jdk
java-1.6.0-openjdk-javadoc-1.6.0.0-5.1.13.3.el6_5.x86_64
java-1.6.0-openjdk-1.6.0.0-5.1.13.3.el6_5.x86_64
java-1.6.0-openjdk-devel-1.6.0.0-5.1.13.3.el6_5.x86_64
[kohchi@localhost demo-base]$ java -version
java version "1.6.0_30"
OpenJDK Runtime Environment (IcedTea6 1.13.3) (rhel-5.1.13.3.el6_5-x86_64)
OpenJDK 64-Bit Server VM (build 23.25-b01, mixed mode)
$

なのでyumでアップデートしてみた。

$ yum search openjdk
Loaded plugins: fastestmirror, refresh-packagekit, security
Determining fastest mirrors
 * base: ftp.jaist.ac.jp
 * extras: ftp.jaist.ac.jp
 * updates: ftp.jaist.ac.jp
============================= N/S Matched: openjdk =============================
java-1.6.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.6.0-openjdk-demo.x86_64 : OpenJDK Demos
java-1.6.0-openjdk-devel.x86_64 : OpenJDK Development Environment
java-1.6.0-openjdk-javadoc.x86_64 : OpenJDK API Documentation
java-1.6.0-openjdk-src.x86_64 : OpenJDK Source Bundle
java-1.7.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.7.0-openjdk-demo.x86_64 : OpenJDK Demos
java-1.7.0-openjdk-devel.x86_64 : OpenJDK Development Environment
java-1.7.0-openjdk-javadoc.noarch : OpenJDK API Documentation
java-1.7.0-openjdk-src.x86_64 : OpenJDK Source Bundle
java-1.8.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.8.0-openjdk-demo.x86_64 : OpenJDK Demos
java-1.8.0-openjdk-devel.x86_64 : OpenJDK Development Environment
java-1.8.0-openjdk-headless.x86_64 : OpenJDK Runtime Environment
java-1.8.0-openjdk-javadoc.noarch : OpenJDK API Documentation
java-1.8.0-openjdk-src.x86_64 : OpenJDK Source Bundle
icedtea-web.x86_64 : Additional Java components for OpenJDK - Java browser
                   : plug-in and Web Start implementation

  Name and summary matches only, use "search all" for everything.
$ su
#
# yum install java-1.7.0-openjdk
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: ftp.jaist.ac.jp
 * extras: ftp.jaist.ac.jp
 * updates: ftp.jaist.ac.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package java-1.7.0-openjdk.x86_64 1:1.7.0.75-2.5.4.0.el6_6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package               Arch      Version                       Repository  Size
================================================================================
Installing:
 java-1.7.0-openjdk    x86_64    1:1.7.0.75-2.5.4.0.el6_6      updates     26 M

Transaction Summary
================================================================================
Install       1 Package(s)

Total download size: 26 M
Installed size: 91 M
Is this ok [y/N]: y
Downloading Packages:
java-1.7.0-openjdk-1.7.0.75-2.5.4.0.el6_6.x86_64.rpm     |  26 MB     00:07     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : 1:java-1.7.0-openjdk-1.7.0.75-2.5.4.0.el6_6.x86_64           1/1 
  Verifying  : 1:java-1.7.0-openjdk-1.7.0.75-2.5.4.0.el6_6.x86_64           1/1 

Installed:
  java-1.7.0-openjdk.x86_64 1:1.7.0.75-2.5.4.0.el6_6                            

Complete!
# yum install java-1.7.0-openjdk-devel
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: ftp.jaist.ac.jp
 * extras: ftp.jaist.ac.jp
 * updates: ftp.jaist.ac.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package java-1.7.0-openjdk-devel.x86_64 1:1.7.0.75-2.5.4.0.el6_6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package                    Arch     Version                    Repository
                                                                           Size
================================================================================
Installing:
 java-1.7.0-openjdk-devel   x86_64   1:1.7.0.75-2.5.4.0.el6_6   updates   9.4 M

Transaction Summary
================================================================================
Install       1 Package(s)

Total download size: 9.4 M
Installed size: 36 M
Is this ok [y/N]: y
Downloading Packages:
java-1.7.0-openjdk-devel-1.7.0.75-2.5.4.0.el6_6.x86_64.r | 9.4 MB     00:03     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : 1:java-1.7.0-openjdk-devel-1.7.0.75-2.5.4.0.el6_6.x86_64     1/1 
  Verifying  : 1:java-1.7.0-openjdk-devel-1.7.0.75-2.5.4.0.el6_6.x86_64     1/1 

Installed:
  java-1.7.0-openjdk-devel.x86_64 1:1.7.0.75-2.5.4.0.el6_6                      

Complete!
# yum install java-1.7.0-openjdk-javadoc
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: ftp.jaist.ac.jp
 * extras: ftp.jaist.ac.jp
 * updates: ftp.jaist.ac.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package java-1.7.0-openjdk-javadoc.noarch 1:1.7.0.75-2.5.4.0.el6_6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package                     Arch    Version                     Repository
                                                                           Size
================================================================================
Installing:
 java-1.7.0-openjdk-javadoc  noarch  1:1.7.0.75-2.5.4.0.el6_6    updates   16 M

Transaction Summary
================================================================================
Install       1 Package(s)

Total download size: 16 M
Installed size: 232 M
Is this ok [y/N]: y
Downloading Packages:
java-1.7.0-openjdk-javadoc-1.7.0.75-2.5.4.0.el6_6.noarch |  16 MB     00:10     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : 1:java-1.7.0-openjdk-javadoc-1.7.0.75-2.5.4.0.el6_6.noarch   1/1 
  Verifying  : 1:java-1.7.0-openjdk-javadoc-1.7.0.75-2.5.4.0.el6_6.noarch   1/1 

Installed:
  java-1.7.0-openjdk-javadoc.noarch 1:1.7.0.75-2.5.4.0.el6_6                    

Complete!
[root@localhost demo-base]# rpm -qa | grep jdk
java-1.6.0-openjdk-javadoc-1.6.0.0-5.1.13.3.el6_5.x86_64
java-1.7.0-openjdk-javadoc-1.7.0.75-2.5.4.0.el6_6.noarch
java-1.6.0-openjdk-1.6.0.0-5.1.13.3.el6_5.x86_64
java-1.6.0-openjdk-devel-1.6.0.0-5.1.13.3.el6_5.x86_64
java-1.7.0-openjdk-devel-1.7.0.75-2.5.4.0.el6_6.x86_64
java-1.7.0-openjdk-1.7.0.75-2.5.4.0.el6_6.x86_64
[root@localhost demo-base]# java -version
java version "1.7.0_75"
OpenJDK Runtime Environment (rhel-2.5.4.0.el6_6-x86_64 u75-b13)
OpenJDK 64-Bit Server VM (build 24.75-b04, mixed mode)
# 

再度、起動してみる。

# java -jar ../start.jar
2015-03-27 08:59:05.829:INFO::main: Logging initialized @862ms
2015-03-27 08:59:06.248:WARN::main: demo test-realm is deployed. DO NOT USE IN PRODUCTION!
2015-03-27 08:59:06.250:INFO:oejs.Server:main: jetty-9.2.9.v20150224
2015-03-27 08:59:06.268:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:/home/foo/jetty/dist/demo-base/webapps/] at interval 1
....

http://localhost:8080 で接続できた。
なお、jettyを起動時に動作させるには、dist/bin/jetty.sh を /etc/init.d 配下にコピーする。このスクリプトには必要な環境変数設定(JETTY_HOME)などの説明が書いてあるのでそれを参考に設定する。

nginxをつかってリダイレクト

80から8080にリダイレクトさせる設定を行う。

# cd /etc/nginx/conf.d
# cat jetty.conf 
#
# Redirecting to jetty servlect
#
server {

    listen       80;
    server_name  _;

    access_log  /var/log/nginx/jetty.access.log  main;

    location /jetty/ {
	proxy_http_version 1.1;
	proxy_pass http://localhost:8080/;
	proxy_redirect http://localhost:8080/ /;
	proxy_cookie_path /jetty /;
    }
}
# /etc/init.d/nginx start

http://localhost/jetty/ これで接続可能。