我使用 clojure/compojure(基于 JVM)开发了一个 Web 应用程序,在开发过程中,我使用在 上运行的嵌入式 jetty 对其进行了测试0.0.0.0:8080
。我现在想将其部署到 ubuntu 上的端口 80 上运行。我使用动态虚拟托管,因此到达端口 80 的任何主机的任何请求都应由我的应用程序处理。
我担心的问题是:
- 我仍然可以嵌入运行它,但我担心以 root 身份运行我的应用程序(需要绑定到端口 80)。我不确定在 JVM 中是否可以“放弃 root”。我需要担心这个吗?
- 此外,提供 Web 应用程序服务是一个已知问题,我应该使用已知的解决方案(jetty 或 tomcat)
- 但尤其是 tomcat 似乎非常重。此外,我只有一个应用程序在内部监听
/*
和执行路由。(使用 compojure/ring)。我想说的是,tomcat 默认将 WAR 分配给我不想要的子文件夹。
所以基本上我需要的是某种非常安全的方式绑定到 Ubuntu 上的端口 80,这样可以以最小的干扰将所有请求发送到我的应用程序。有什么想法吗?
答案1
- 它不需要以 root 身份运行。我知道您在开发应用程序时使用 root。但在部署时,只需确保您授予应用程序的用户对您的 Web 应用程序所接触的所有文件具有相同的权限或可能属于同一组。
- Tomcat 也很不错,不过你说得对。它确实附带了许多其他附加功能。
- Tomcat 不需要您有 war 文件才能部署。您可以将 Web 应用程序移到 webapp 下,它也应该运行文件。
暴露 tomcat 或 jetty 服务器应该效果相同。我不确定 jetty 的开发情况以及它们的安全性如何,但我可以说 tomcat 相当不错,而且它们也相当活跃。
忘记了您的端口问题。暴露端口 80 应该不是问题。您可以轻松地在配置上更改它。