Включить http2 в nginx только для некоторых клиентов - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть два набора пользователей, использующих okhttp/2.7.0 и okhttp/3.12.0.Я хочу включить http2 в nginx только для тех пользователей, которые используют okhttp/3.12.0.Клиент обеспечивает отправку своего идентификатора.Есть ли способ использовать эту информацию и включить http2 только для этих пользователей.

Примечание: несколько портов для меня не вариант.

Моя версия nginx и ОС

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 выглядит так

server {
    listen 443 ssl http2;
    ...

1 Ответ

0 голосов
/ 26 декабря 2018

Это не совсем возможно.Клиент отправляется только как часть HTTP-сообщения, которое отправляется только после . Очевидно, что версия HTTP для использования определена.Первоначально сообщение для создания соединения и настройки параметров SSL / TLS не будет иметь клиента (как правило, в этом случае версия HTTP определяется с использованием расширения ALPN для TLS).

Однако существуют и другиеВозможные варианты, в том числе:

  • В зависимости от возможностей клиента.Я не знаком с okhttp, но из быстрого Google кажется, что поддержка ALPN была добавлена ​​только в v3, так что вы можете отключить старый NPN на вашем сервере, а затем, если это правильно, то теоретически старый клиент не сможетчтобы договориться о HTTP / 2, поэтому вернемся к HTTP / 1.1.К сожалению, похоже, что для этого нет опции конфигурации Nginx, поэтому вам нужно будет создать специальную версию OpenSSL без поддержки NPN , а затем скомпилировать Nginx для этого.Вероятно, больше хлопот, чем стоит.

  • Используйте Apache вместо Nginx, поскольку он никогда не поддерживал NPN

  • Использование нескольких IP-адресов и каким-то образом направляя каждую версию котдельный IP.Хотя я подозреваю, что вы не можете использовать отдельные порты, но, вероятно, вы тоже не сможете этого сделать.

В общем, это немного взломать, если честно, и поэтому я не рекомендую вам продолжать,Однако вы не объяснили, почему вы хотите использовать HTTP / 2 для одного набора клиентов, а не для другого.Может быть, есть лучший способ добиться того, чего вы хотите, если вы объясните это.

...