反向代理HTTP / 2从h2到h2c

我们有一个能够通过h2c(HTTP / 2明文)提供内容的java web服务器,

我们想在h2c中将使用h2(即标准的HTTP / 2 over SSL)build立的代理连接反向到java服务器。

nginx上启用HTTP / 2非常简单,处理传入的h2连接工作正常。

我们如何告诉nginx使用h2c而不是http / 1.1代理连接?

注意:非nginx解决scheme可能是可以接受的

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年6月)

这可以用haproxy使用一个简单的configuration文件来完成。

查询(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 

HAProxy确实支持。

HAProxy可以卸载TLS,并转发到说h2c的后端。

本博客文章提供了有关如何设置此配置的详细信息 。