Обратное проксирование HTTP / 2 от h2 до h2c

У нас есть веб-сервер java, который может обслуживать контент через h2c (открытый текст HTTP / 2)

Мы хотели бы отменить прокси-соединения, созданные с использованием h2 (то есть стандартного HTTP / 2 поверх SSL), с java-сервером в h2c.

Включение HTTP / 2 в nginx достаточно просто, а обработка входящих h2-соединений работает нормально.

Как мы скажем nginx прокси-соединение, используя h2c, а не http / 1.1?

Примечание: решение, отличное от nginx, может быть приемлемым

server {
    listen       443 ssl http2 default_server;
    server_name  localhost;

    ssl_certificate      /opt/nginx/certificates/???.pem;
    ssl_certificate_key  /opt/nginx/certificates/???.pk8.key.pem;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    location / {
        proxy_pass http://localhost:8080/;  ## <---- h2c here rather than http/1.1
    }
}

ЗАКЛЮЧЕНИЕ (Июнь 2016 г.)

Это можно сделать с помощью haproxy, используя файл конфигурации, такой же простой, как приведенный ниже.

Запрос(HttpServletRequest) req.getProtocol() четко возвращаетсяHTTP/2.0

global
tune.ssl.default-dh-param 1024

defaults
timeout connect 10000ms
timeout client 60000ms
timeout server 60000ms

frontend fe_http
mode http
bind *:80
# Redirect to https
redirect scheme https code 301

frontend fe_https
mode tcp
bind *:443 ssl no-sslv3 crt mydomain.pem ciphers TLSv1.2 alpn h2,http/1.1
default_backend be_http

backend be_http
mode tcp
server domain 127.0.0.1:8080

Ответы на вопрос(1)

Ваш ответ на вопрос