在Linux上将Jetty部署为端口80守护进程

我很好奇Linuxpipe理员正在用什么技术来pipe理你的Jetty部署。 我来自Windows服务器的背景,所以我仍然习惯了所有这一切。 我一直在寻找一个好的解决scheme,在Linux安装中将Jetty实例部署为端口80。

到目前为止,我已经看到了这个允许Jetty作为守护进程运行的线程:

http://jira.codehaus.org/browse/JETTY-458

我已经看到了这个线程,它讨论了在端口80上设置备用端口:

http://wiki.eclipse.org/Jetty/Howto/Port80

这些都似乎有点哈克。 当然,在Linux上部署一个像Jetty这样的Web服务器是比较标准的方法。 我目前正在使用CentOS 5.5,但对其他发行版开放。

提前致谢。

不幸的是,Java进程往往不像其他语言一样守护进程。 对于Jetty,您将需要使用daemonize等来启动和pipe理该进程。

编辑 – 一些额外的细节:

在构build守护进程之后(按照上述链接中的说明),命令行参数在生成的文件daemonize.html进行了解释。 从启动命令中进行testing,确保其按预期工作。

然后在启动时启动Jetty,将daemonize命令添加到init shell脚本(例如CentOS / RHEL append /etc/rc.d/rc.local )。 例如:

 #!/bin/bash #...other startup commands /path-to/daemonize -c /path-to/jetty/ -p pid.txt -e error.log -o console.log -a /usr/bin/java -jar start.jar 

我会在应用程序服务器前放置一个Apache2代理。 Apache2有一个专门为此devise的模块。 它将适当的标头添加到您的应用程序的请求中以标识远程用户。 Apache2可以用来提供静态内容,只能将应用程序请求传递给应用程序服务器。

Windows不实现特权端口(端口less于1024)。 除了以root身份运行Jetty以外,还需要将一些技术以root身份绑定到端口80并将数据传递给Jetty。 绑定端口后,Apache2使用setuid,以便处理请求的进程不具有对系统的根访问权限。

您find的网站显示了一些选项:

  • 将端口80redirect到使用iptables或ipchains的非特权端口。
  • 使用包装器绑定端口80,然后在将控制权作为守护程序传输到Jetty之前执行setuid命令。 Java不提供对setuid的直接访问,所以需要本地库。
  • 使用xinetd将端口80redirect到非特权端口。 我会用iptables。