Я настраиваю nginx как обратный прокси (перед некоторыми серверами http / 1.1). Первоначально я настроил исходный сервер на экземпляре nginx. Как и ожидалось, он возвращал контент исключительно через HTTP / 2. Однако, когда я настроил nginx для предоставления прокси-службы, он вернул смесь ответов HTTP2 и HTTP / 1.1.
server {
listen 443 ssl http2;
server_name www.example.com;
ssl_certificate /etc/nginx/ssl/example.com/cert.crt;
ssl_certificate_key /etc/nginx/ssl/example.com/cert.key;
include snippets/ssldefaults.conf;
location / {
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_ssl_verify off;
proxy_pass https://192.168.23.12/
}
}
(Я использую Chrome 76.0.3809.132 и nginx 1.14, чтобы проверить это)
Различные протоколы, поступающие от nginx, поступают с одного и того же исходного сервера. Мой тестовый пример (например) включает несколько кешируемых файлов CSS - некоторые поступают через HTTP2, некоторые через 1.1.
Что могло вызвать разницу?
Невозможно обслуживать HTTP / 2 и HTTP / 1.1 через одно и то же соединение.
Поэтому я бы предложил здесь одно из следующих действий:
Я предлагаю вам добавить $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;