envoy作为http2的前置代理 - 为envoy启用http2(又称h2)。

开箱即用的envoy没有被配置为与使用新的HTTP/2连接的客户建立连接。

HTTP/2针对现代网络进行了优化,有二进制头信息等。- 速度更高。

既然envoy能够对客户说HTTP/2,那么设置它就不难了。

而这个设置真的是 容易,也是如此。你只需添加 在你的监听器的common_tls_context中的一行。

alpn_protocols:[ "h2,http/1.1" ]

这就是了。(引号应该是正常的引号,以防WordPress把这些搞乱)

ALPN代表的是 应用层协议协商  - 这显然是HTTP/2工作的需要。

默认情况下,http_connection_manager envoy过滤器在AUTO模式下会同时支持HTTP1和HTTP2。

通过添加alpn_protocols,你可以实际使用这一功能。

我的envoy.yaml供你参考

我打算重现 我的整个envoy.yaml 所以你可以看到这句话必须放在什么背景下。

静态_资源。
   听众。
   - 地址。
       socket_address:
         地址。0.0.0.0
         port_value: 80
     filter_chains。
     - 滤波器。
       - 名称: envoy.http_connection_manager
         配置。
           codec_type: auto
           stat_prefix: ingress_http
           route_config。
             virtual_hosts。
             - 名称: 后台
               域。["*"]
               航线。
               - 匹配。{前缀。"/" }
                 重新定向。
                   path_redirect: "/"
                   https_redirect: true
           http_filters。
           - 名称: envoy.router
             配置。{}
   - 地址。
       socket_address:
         地址。0.0.0.0
         port_value:443
     filter_chains。
     - tls_context。
         common_tls_context。
           tls_certificates。
           - certificate_chain: { 文件名: "/etc/example-com.crt" }
             private_key: { filename: "/etc/example-com.key" }
           alpn_protocols:[ "h2,http/1.1" ]
       滤波器。
       - 名称: envoy.http_connection_manager
         配置。
           stat_prefix: ingress_https
           route_config。
             virtual_hosts。
             - 名称: 后台
               域。["*"]
               航线。
               - 匹配。{前缀。"/" }
                 路线。{ 集群: target_taxgod }
           http_filters。
           - 名称: envoy.router
             配置。{}
   集群。
   - 名称: target_taxgod
     connect_timeout:0.25s
     类型:strict_dns
     lb_policy: round_robin
     主持人。
     - socket_address:
         地址: taxgod
         port_value:3000
管理员。
   access_log_path:"/tmp/envoy.log"
   地址。
     socket_address:
       地址。0.0.0.0
       端口_值: 9901

该envoy.yaml采用端口80和端口443进行监听。对80端口的HTTP请求被重定向到443端口。所有流量都被发送到同一docker网络上的docker容器 "taxgod"。详情请参考我的这篇文章。

请不要指望复制粘贴这整个事情会起作用--不幸的是,WordPress有时太聪明了,它把各种字符和代码格式都搞乱了。

参考文献。