Jetty 9.0 嵌入了带有 SPDY 但没有 SSL/NPN 的配置
Posted
技术标签:
【中文标题】Jetty 9.0 嵌入了带有 SPDY 但没有 SSL/NPN 的配置【英文标题】:Jetty 9.0 embeded config with SPDY but without SSL/NPN 【发布时间】:2014-04-19 05:10:07 【问题描述】:SSL/NPN 将通过我们的负载均衡器 (Haproxy) 进行处理,因此我真的不需要 Jetty 为我们执行此操作。
但我在网上看到的所有示例都只显示了如何使用 SSL/NPN 来做到这一点,而不是没有。
到目前为止,这是我尝试过的:
Server server = new Server();
HTTPConfiguration httpConfig = .... // set up some additional http config here
PushStrategey push = new ReferrerPushStrategy();
List<ConnectionFactory> factories = new ArrayList<>();
factories.add(new HTTPSPDYServerConnectionFactory(SPDY.V3, httpConfig, push));
factories.add(new HTTPSPDYServerConnectionFactory(SPDY.V2, httpConfig, push));
factories.add(new HTTPConnectionFactory(httpConfig));
ServerConnector connector = new ServerConnector(server, factories.toArray(new ConnectionFactory[factories.size()]));
connector.setPort(port);
server.addConnector(connector);
connector.start();
....
不幸的是,似乎出了点问题,当我尝试通过 curl 或我的浏览器等客户端访问服务器时,它们会无限期地挂起。我做错了什么?
谢谢
【问题讨论】:
【参考方案1】:当您将 ServerConnector
配置为使用明文 SPDY 时,您的客户端也必须使用明文 SPDY。
如果您使用像 curl
这样的客户端或浏览器,它们不会说明文 SPDY。客户端将发送一个无法理解的 HTTP 请求(服务器需要 SPDY),这就是您的连接“挂起”的原因。
只有 Chromium/Chrome 有一种模式,您可以使用 --use-spdy=no-ssl
参数使其说出明文 SPDY,如 here 所述。
因此,如果您使用明文 SPDY,则配置多个 ServerConnectionFactory
毫无意义,因为无法根据正在协商的协议选择一个,因为没有协议协商。
协议协商仅在使用 SSL+NPN 时发生。
如果你真的想设置一个明文SPDY ServerConnector
,你的代码基本上是正确的(除了不必要的多个ServerConnectionFactory
); this 是在Jetty SPDY 测试套件中如何设置的示例。
最后,另请参阅reference documentation about SPDY。
【讨论】:
当然,谢谢,这是有道理的。这是否意味着我必须为我们想要支持的每个 SPDY 版本打开单独的连接器/端口?我想在这种情况下,在负载均衡器而不是 Jetty 上实现 SPDY 和 SSL/NPN 更有意义,尽管在这种情况下很难实现有用的推送策略。 取决于负载均衡器。那些能够在卸载 SSL 后将明文 SPDY“隧道”传输到后端的客户端将允许客户端受益于 Jetty 中的 SPDY 功能,例如多路复用和 SPDY 推送,而不会使负载均衡器与 SPDY 功能混淆。例如Webtide blogs就是这样配置的,使用HAProxy作为负载均衡器。在这种情况下,我只会宣传一个 SPDY 版本;大多数(如果不是所有)浏览器都支持 SPDY/3,因此仍然支持 SPDY/2 没有什么意义。 @sbordet 我有一个关于 SPDY 码头 9.0 的问题,但不知何故我无法弄清楚。我们可以将 jetty 9.0 与 SPDY 以及 solr zookeeper 一起使用吗?我一直在尝试这样做,但不知何故,如果我在 jetty 9.0 中添加模块 spdy,zookeeper 服务器甚至都不会启动。如果你能帮助我,我将不胜感激。我也发布了一个关于它的问题,***.com/questions/23191710/…以上是关于Jetty 9.0 嵌入了带有 SPDY 但没有 SSL/NPN 的配置的主要内容,如果未能解决你的问题,请参考以下文章