0

我在 /mine 有一个应用程序在支持 SPDY 的 Jetty 服务器上运行。它位于用作代理的 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 执行此操作。

有没有办法让这个工作?

4

1 回答 1

0

对于您要运行的特定配置,恐怕无法使其与 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 功能。不仅如此,Jetty 还为您提供了广泛的 Apache 功能,例如重写代理PHP/FastCGI 支持等。对于大多数配置,您不需要 Apache,因为 Jetty 可以做到。

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

第二种解决方案的优点是 TLS 将由 HAProxy 更有效地完成,并且您可以更轻松地在端口 80 上运行它。但是,您必须配置两台服务器(HAProxy 和 Jetty),而不仅仅是一台。

查看Jetty HTTP/2 文档Webtide 博客,我们会在其中定期添加有关 HTTP/2、配置和示例的条目。

于 2015-06-11T21:46:45.410 回答