Apache 防火墙后面的 Jetty 服务器 运行 SPDY

Jetty server running SPDY behind an Apache firewall

我在支持 SPDY 的 Jetty 服务器上的 /mine 运行 有一个应用程序。它位于用作代理的 Apache 防火墙后面。

位于 /mine 的应用程序通过 Apache 上的以下配置规则进行路由:

RewriteRule ^/mine$ /mine/ [R,L]
ProxyPass /code/ https://jettyserver:9443/mine/ nocanon
ProxyPassReverse /mine/ https://jettyserver:9443/mine/ nocanon

因此,当我点击 apache/mine/ 时,我的浏览器没有与我的应用程序协商 SPDY。

将 mod_spdy 添加到代理是正确的方法,但我目前无法使用我们 运行 的 Apache 来做到这一点。

有什么方法可以让它发挥作用吗?

对于您想要 运行 的特定配置,恐怕无法使用 SPDY 或 HTTP/2。

配置为反向代理的 Apache 与 Jetty 对话 HTTP/1.1,所以根本没有办法让 SPDY 或 HTTP/2 进入画面(考虑到你不能让 Apache 对话 SPDY) .

但是,有许多替代解决方案。 让我们关注 HTTP/2 只是因为 SPDY 现在正在逐步淘汰,取而代之的是 HTTP/2。

第一个也是最简单的解决方案就是完全删除 Apache。 您只需将 Jetty 公开为您的服务器,它就可以毫无问题地向浏览器发送 HTTP/2 和 HTTP/1.1。 Jetty 将处理 TLS,然后 HTTP/2 或 HTTP/1.1.

第二种方案是把HAProxy放在前面,转发给Jetty。 HAProxy 将处理 TLS 并将明文 HTTP/2 或 HTTP/1.1 转发到 Jetty。

这两种解决方案的优势在于,您将受益于 Jetty 的 HTTP/2 支持及其 HTTP/2 Push capabilities。 不仅如此,Jetty 还为您提供了广泛的 Apache 功能,例如 rewriting, proxying, PHP/FastCGI support 等。 对于大多数配置,您不需要 Apache,因为 Jetty 可以做到。

第一个解决方案的优点是您只需配置一个服务器 (Jetty),但您可能会为 TLS 支付一点费用,因为 Jetty 使用的 JDK 实现并不是最有效的。

第二种解决方案的优点是 HAProxy 可以更有效地完成 TLS,并且您可以 运行 在端口 80 上更容易。但是,您必须配置两个服务器(HAProxy 和 Jetty)只有一个。

看看 Jetty HTTP/2 documentation and at the Webtide blogs 我们通常会在其中添加有关 HTTP/2、配置和示例的条目。