tomcat - Pivotal CloudFoundry 上的 Nginx/Apache2 httpd 和 Tomcat 7

标签 tomcat nginx apache2 cloud-foundry

在 CloudFoundry 上的 Tomcat 实例前面配置 Web 服务器的最佳方法是什么?

我的任务是研究在 PCF 上将 Web 服务器放在 Tomcat 实例前面的最佳方法。主要是重写 URL(尝试从多站点应用程序的 URL 中删除应用程序上下文路径)

我遇到的主要问题是,除了作为 java 构建包的一部分捆绑的嵌入式 Web 服务器 (Jetty) 之外,它不包含任何其他 Web 服务器 NGINX 或 Apache2。我认为这是现有应用程序中非常常见的场景。我知道静态文件 buildpack 包含 NGINX 而 PHP buildpack 包含 Apache2 - 这是否意味着我必须 fork java-buildpack 并自定义 buildpack 以满足我的需要?

此外,我如何绕过修改 httpd.conf - 它是否与文档中的方法相同 - 主要是在 .my-customized-buildpack/httpd(或 nginx)/*.conf 下添加我的配置文件?

最佳答案

What is the best way to configure a web server in front of a Tomcat Instance on CloudFoundry?

这不适用于海报,但对于阅读本文的其他人来说,考虑为什么您要这样做很重要。如果您只是寻求负载平衡,则不需要这样做。 CF 平台自动处理负载平衡,这就是 Java 构建包默认不添加 Nginx 或 Apache HTTPD 的原因。

Mostly to rewrite URLs (Trying to remove the application context path from the URL for a multi site application)

您是否考虑过 UrlRewriteFilter .这是一种无需其他服务器即可重写 URL 的好方法。它也已经存在了很长时间并且经过了实战测试。

另一种选择可能是使用 route service (more here)。这是 CF 平台提供的功能,允许您拦截传入的请求并对其进行调整。它类似于 Java Servlet 过滤器,但在更高层。你只有第二个应用程序,它的作用类似于过滤器,平台处理将请求路由到“过滤器”应用程序和你的原始应用程序。上面的链接对此进行了更详细的解释。

话虽如此,我仍然建议使用 UrlRewriteFilter 而不是路由服务,只要该过滤器适合您,因为该过滤器是一种更轻量级的解决方案。

您还可以查看 fork /自定义构建包,但恕我直言,这更加复杂,并且会带来持续的维护负担(您现在必须使您的构建包 fork 保持最新)。

The main issue that I am encountering is that except for the embedded web server (Jetty) that is bundled as part of the java build pack it does not contain any other web server NGINX or Apache2.

虽然这在 CF 之外很常见,但在 CF 中通常没有必要。平台本身提供负载平衡,这是进行此类设置的主要原因。在 CF 上,如果您还添加了 Nginx 或 Apache HTTPD,您最终会在请求路径中增加一个不必要的跃点。

默认情况下:浏览器 -> 负载均衡器 -> gorouters -> 你的应用程序(tomcat/jetty)

您要执行的操作:浏览器 -> 负载均衡器 -> gorouters -> Nginx/HTTPD -> 您的应用程序 (tomcat/jetty)

此外,无论如何,该平台更适合做出负载平衡决策,因为它知道您何时扩展和缩减应用实例。

请仔细考虑是否有必要添加这个额外的跃点。它增加了延迟、复杂性和另一个可能的故障向量。

I know that the staticfile buildpack contains NGINX and the PHP buildpack contains Apache2

Nginx 和 HTTPD 包含在这些构建包中,因为它是通过 HTTP 提供内容的主要方式。较新版本的 PHP 具有内置 Web 服务器,但不建议将其用于生产用途,因此我们仍然依赖 Nginx 或 HTTPD 来处理 HTTP 请求并将它们传递给 PHP(通过 FastCGI)。

Also, how do I get around modifying the httpd.conf - Is it the same approach as what is the documents - Basically adding my configuration files under .my-customized-buildpack/httpd (or nginx)/*.conf?

抱歉,我不明白你的问题。您说您在上面使用的是 Java 应用程序,因此不会有任何 HTTPD 或 Nginx 配置。您是否正在尝试 fork 和自定义 Java 构建包?如果是这样,那可能值得它自己提出问题。

希望对您有所帮助!

关于tomcat - Pivotal CloudFoundry 上的 Nginx/Apache2 httpd 和 Tomcat 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42283460/

相关文章:

java - 在 Tomcat 6 上部署 jax-ws Web 服务时出现 AbstractMethodError

nginx - 如何将 vue.js 与 Nginx 一起使用?

python - 无法使用 subprocess.Popen 在 Web 服务中打开 pdf 文件

security - CSR 规则 _23 上的 mod_sec 触发器

zend-framework - Ubuntu 上的 Apache 2 在某些 url 上显示 403 被禁止

tomcat - 在 Tomcat 上运行的性能/负载测试 Web 应用程序

java - 使用 NTEventLogAppender 两次 : in Tomcat and in my webapp

session - Tomcat 8 - websockets session 和复制

nginx - 无法在 Nginx 服务器中使用 LetsEncrypt 设置 HTTPS

ruby-on-rails - 如何管理用户上传的文件?