Nginx/Apache2 httpd 和 Tomcat 7 在 Pivotal CloudFoundry 上

Nginx/Apache2 httpd and Tomcat 7 on Pivotal CloudFoundry

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

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

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

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

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 Filter,但在更高层。您只有第二个应用程序,它的作用类似于过滤器,平台会处理对 "filter" 应用程序和您的原始应用程序的路由请求。上面的链接对此进行了更详细的解释。

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

您也可以查看分叉/自定义构建包,但恕我直言,这更加复杂,并且有持续的维护负担(您现在必须保留您的构建包分叉 up-to-date)。

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 的较新版本有一个 built-in 网络服务器,但不建议将其用于生产用途,因此我们仍然依赖 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 配置。您是否正在尝试分叉和自定义 Java 构建包?如果是这样,那可能值得它自己提出问题。

希望对您有所帮助!