当您运行一个 Java Servlet 容器并希望在端口 80 上同时提供静态和动态内容时,您会遇到一个经典问题,即是否将服务器运行为:
- 如果可以的话,希望以 root 身份进入 chroot jail (还没有开始工作)
- 作为非 root 用户,然后使用 IPTables 将端口 80 转发到容器正在运行的其他端口 (>1024)
- 两者:作为非 root 用户、IPTables 和 chroot jail。
opt 的问题。 1 是 chrooting 的复杂性,仍然是运行 root 的安全问题。opt 的问题。 2 是每个 Linux 发行版都有不同的持久化 IPTables 的方式。选项 3 当然可能是个好主意,但很难设置。
最后,每个发行版在守护程序脚本方面都有令人讨厌的差异。
人们认为最好的发行版无关解决方案是什么?是否有资源展示如何做到这一点?
编辑:我宁愿不在 servlet 容器前运行 Apache,因为该站点主要是动态的并且总内存占用量很重要(托管成本)。
最佳答案
以非 root 身份运行并在端口 80 上使用标准网络服务器 (apache) 或轻量级网络服务器(例如 lighttpd 或 nginx)重定向到您的实例。
这样做的好处是标准网络服务器可以提供静态内容,从而减少网络应用程序的负载。您甚至可以让它反向代理并缓存 Web 应用程序流量。
关于java - 在 Linux 上,人们是 chroot Java Web 应用程序还是使用 IPTables 并以非 root 身份运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3063351/