Используйте HTTP / 2.0 между обратным прокси-сервером nginx и внутренним веб-сервером

19

Я использую nginx в качестве обратного ssl-прокси перед внутренним веб-сервером, способным выполнять HTTP / 2.0.

Я заметил, что nginx передает запросы на внутренний сервер через HTTP / 1.1, а не HTTP / 2.0. Можно ли указать nginx использовать незашифрованное соединение HTTP / 2.0? Это увеличит производительность?

S1lentSt0rm
источник
хотя спецификации http2 говорят, что шифрование не требует, nginx в настоящее время не поддерживает http2 без ssl.
Марко
Так что будет использовать HTTP / 2.0, если бы я указал адрес https: //? Ну, тогда я думаю, что лучше использовать HTTP / 1.1. Не имеет смысла дважды шифровать трафик, и производительность HTTP / 2.0 с помощью ssl, вероятно, будет не такой хорошей, как HTTP / 1.1 без ssl, не так ли? Я имею в виду, что это делает бесполезным обратный ssl-прокси;)
S1lentSt0rm
Не имеет значения, шифруете ли вы трафик между передним и внутренним серверами, если они находятся на одной машине. Что касается производительности: http2 работает немного быстрее, чем http1.1, даже с шифрованием. не могу сказать, не пытаясь, если это будет иметь значение.
Марко

Ответы:

21

Нашел это: https://trac.nginx.org/nginx/ticket/923

В обозримом будущем не планируется реализовывать поддержку HTTP / 2 в прокси-модуле.

Выдержка из письма, указанного в билете:

Практически нет смысла его реализовывать, поскольку основное преимущество HTTP / 2 заключается в том, что он позволяет мультиплексировать множество запросов в одном соединении, тем самым [почти] снимая ограничение на количество simalteneous-запросов - и при разговоре с ним такого ограничения нет ваши собственные бэкэнды. Более того, при использовании HTTP / 2 для бэкэндов дела могут ухудшиться из-за использования одного соединения TCP вместо нескольких.

S1lentSt0rm
источник
9
Похоже, это означает, что вы не можете использовать HTTP / 2 Server Push, если вы используете прокси с помощью nginx, даже если бэкэнд-сервер иначе поддерживал бы его, если бы к нему обращались напрямую.
Томасруттер
3
Я использую обратные прокси-серверы nginx для нелокальных сайтов по медленным соединениям, поэтому HTTP / 2 поможет мне. Жаль, что разработчики nginx не рассмотрели этот вариант использования :-(.
markshep
5

К сожалению, nginx не поддерживает прокси для внутреннего сервера http / 2, на который ссылается https://www.nginx.com/blog/http2-module-nginx/#QandA

Вопрос: Будете ли вы поддерживать HTTP / 2 на стороне восходящего потока или только HTTP / 2 на стороне клиента?

A: На данный момент мы поддерживаем только HTTP / 2 на стороне клиента. Вы не можете настроить HTTP / 2 с proxy_pass. [Редактор. В оригинальной версии этого поста это предложение было неправильно расшифровано как «Вы можете настроить HTTP / 2 с proxy_pass». Приносим свои извинения за возможные недоразумения.]

Но какой смысл HTTP / 2 на стороне сервера? Потому что, как вы можете видеть из тестов, в HTTP / 2 нет особых преимуществ для сетей с малой задержкой, таких как восходящие соединения.

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

tangxinfa
источник