Включить HTTP2-сервер Push Nginx - PullRequest
0 голосов
/ 20 марта 2019

Я установил nginx с поддержкой HTTP2.Мой nginx находится за балансировщиком нагрузки приложения, и завершение SSL происходит только на LB.

Сначала я включил HTTP2_PUSH, как показано ниже:

http2_push_preload on;
location /mx {
       http2_push https://example.com/css/style.css;
       http2_push https://example.com/js/main.js
}

Но это не сработало.Моя вкладка сети отладчика браузера показала, что инициатором является «индекс», и nghttp также ничего не показывал.

Другой подход, который я попробовал, это:

http2_push_preload on;
    location /mx {
           add_header Link "<https://example.com/css/style.css>; rel=preload; as=style,<http2_push https://example.com/js/main.js>; rel=preload; as=script";
    }

Следующий подход изменил инициатор с index на other на вкладке сети, но инструмент nghttp по-прежнему подтверждает, что сервер не выдвигается.

1 Ответ

0 голосов
/ 20 марта 2019

Насколько я понимаю, AWS Application Load Balancer является балансировщиком нагрузки уровня 7 (HTTP) и поддерживает только HTTP / 2 на внешнем интерфейсе, а не на вашем Nginx.

Вы можете проверить это, добавив$server_protocol к вашему Nginx log_format:

log_format my_log_format '$remote_addr - $remote_user [$time_local] $server_protocol "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';
access_log /usr/local/nginx/nginx-access.log my_log_format;

Я предполагаю, что трафик поступает как HTTP / 1.1.

Даже если AWS ALB поддерживает HTTP / 2 длябэкэнд сейчас, это не значит, что он будет поддерживать HTTP / 2 Push.Это усложняется, когда задействовано несколько частей инфраструктуры, как это (что если ALB и Nginx оба поддерживают push, а клиент - нет), и лучший совет - это push из пограничного узла, особенно если он поддерживает это с помощью инструкций заголовка предварительной загрузки HTTP.

Возможно, вам лучше использовать балансировщик нагрузки уровня 4 (TCP), чтобы заставить его работать.

...