Как стать автором
Обновить

Комментарии 8

Потрачу свой комментарий к статье студента. Позвольте вас познакомпить, что для HTTP есть такая штука, как проксирование запросов. Прямо изначально так задумывалось. Можно поставить на фронтэнде какой-нибудь nginx или что-то иное, который будет поддерживать все необходимые фишки, типа HTTP 2.0, работу с сертификатами для доменов и прочее. А на бекэнде ваша задача просто предоставить для этого сервера нормальный ответ этому серверу по любому поддерживаемому протоколу.

а вот HTTP/2 наоборот может быть полезным (приложение за прокси сервером в виде nginx ...)

Оно в суперпозиции из-за того, что нафиг не нужно. Обычно перед nodejs стоит nginx который терминирует ssl и дальше все работает по обычному http.

А как эта архитектура разрешает проблему Head-of-line blocking между nginx и web-приложением?

Никак. Я и не говорил, что она что-то решает.

Но если у вас возникают такие проблемы, то не уверен, что http2 спасет ситуацию. Скорее всего затык в медленном бекенде или малом числе одновременных запросов.

и дальше все работает по обычному http

А ещё потому, что по "необычному" (HTTP/2) nginx в upstream не умеет. HTTP/2 поддерживается только для клиентской стороны (браузеров). Разрабы nginx считают, что большого выигрыша от HTTP/2 в upstream нет.

А вот разрабы apache'а считают, что их сервер должен "мочь в HTTP/2" с обеих сторон, и в apache такая возможность есть:

RewriteRule    "^/(.*)$"  "h2c://localhost:3000/$1"  [P]

Это значит, что если проксирование идёт через nginx, то про Server Push в своих node-приложениях можно забыть. Реализовывать его придётся на уровне nginx, через его конфиги. Но, в общем-то, не такая уж это и нужная вещь - Server Push.

Он и не обязан все уметь. Я лишь привел вам самый популярный вариант построения приложения. Никто не мешает убрать nginx и взять nodejs, golang, php (даже так можно) и практически любой другой язык.

Хотя не уверен на счет "не умеет". У меня nginx прекрасно проксирует gRPC трафик, который работает через http2 https://www.nginx.com/blog/nginx-1-13-10-grpc/

Судя по конфигу из приведённой ссылки, nginx проксирует именно gRPC-траффик.

http {
    server {
        location / {
            grpc_pass grpc://...;
        }
    }
}  

Т.е., обычный 'h2c' за пределами его возможностей. Мне пока не удалось найти пример конфигурации, аналогичный apache'вской, чтобы заставить nginx проксировать запросы на простой HTTP/2-сервер (не gRPC). Обычный proxy_pass со второй версией HTTP не работает, судя по документации (и вообще на этой странице поиск по ключу h2c ничего не даёт).

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории