繁体   English   中英

仅在某些客户端中在Nginx中启用http2

[英]Enable http2 in nginx only for some clients

我有两组使用okhttp/2.7.0okhttp/3.12.0 我只想为使用okhttp/3.12.0用户启用nginx中的okhttp/3.12.0 客户端确保发送其标识符。 有没有一种方法可以使用此信息并仅为那些用户启用http2。

注意:多个端口不是我的选择。

我的Nginx和OS版本

nginx version: nginx/1.14.2                                                                                                                                                                                                                  
built by gcc 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.4)                                                                                                                                                                                           
built with OpenSSL 1.0.2h  3 May 2016                                                                                                                                                                                                        
TLS SNI support enabled  

我的nginx conf像这样

server {
    listen 443 ssl http2;
    ...

这实际上是不可能的。 显然,客户端仅作为HTTP消息的一部分发送,仅确定要使用的HTTP版本之后才发送。 创建连接并设置SSL / TLS参数的初始消息将没有客户端(通常是使用ALPN TLS扩展来确定HTTP版本的客户端)。

但是,还有其他可能的方法,包括:

  • 取决于客户端的功能。 我对okhttp不太熟悉,但是从一个快速的Google看来,ALPN支持仅在v3中添加了,因此您可以在服务器上禁用较早的NPN,然后,如果是正确的话,那么从理论上讲,较旧的客户端将无法协商HTTP / 2,因此将回退到HTTP / 1.1。 不幸的是,似乎没有Nginx配置选项,因此您需要构建一个没有NPN支持的特殊版本的OpenSSL ,然后针对该版本编译Nginx。 麻烦可能超过其价值。

  • 使用Apache而不是Nginx,因为它从不支持NPN

  • 使用多个IP并以某种方式将每个版本定向到一个单独的IP。 尽管我怀疑您不能使用单独的端口,但您也可能无法执行此操作。

总而言之,说实话有点可笑,所以我建议您不要这样做。 但是,您尚未解释的是为什么要对一组客户端使用HTTP / 2,而不对另一组客户端使用HTTP / 2。 解释一下,也许有更好的方法来实现您想要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM