我很好奇你们这些 Linux 管理员使用什么技术来管理 Jetty 部署。我有 Windows Server 背景,所以我还在适应这一切。我一直在寻找一个好的解决方案,用于在 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,但也接受其他发行版。
提前致谢。
答案1
不幸的是,Java 进程不像其他语言那样守护进程。对于 Jetty,您需要使用类似守护进程启动并管理该流程。
编辑- 一些额外的细节:
构建守护进程后(按照上述链接中的说明),命令行参数在生成的文件中进行了说明daemonize.html
。从启动命令中进行测试,以确保它按预期工作。
然后要在启动时启动 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
答案2
我会在应用服务器前面放置一个 Apache2 代理。Apache2 有一个专门为此设计的模块。它会将适当的标头添加到请求中,以便您的应用程序识别远程用户。Apache2 可用于提供静态内容,并且仅将应用程序请求传递给应用服务器。
Windows 未实现特权端口(小于 1024 的端口)。除了以 root 身份运行 Jetty 之外,还需要一些技术以 root 身份绑定端口 80 并将数据传递给 Jetty。Apache2 在绑定端口后使用 setuid,以便处理请求的进程不具有系统的 root 访问权限。
您找到的站点显示了一些选项:
- 使用 iptables 或 ipchains 将端口 80 重定向到非特权端口。
- 使用包装器绑定端口 80,然后执行 setuid 命令,然后将控制权移交给作为守护进程的 Jetty。Java 不提供对 setuid 的直接访问,因此需要本机库。
- 使用 xinetd 将端口 80 重定向到非特权端口。我会改用 iptables。