envoy als http 2 front proxy - inschakelen van http 2 voor envoy (aka h2)

Out of the box is envoy niet geconfigureerd om verbindingen op te zetten met clients die er verbinding mee maken met de nieuwe HTTP/2.

HTTP/2 is geoptimaliseerd voor het moderne web, met binaire headers, enz. - hogere snelheid.

Aangezien envoy in staat is om HTTP/2 uit te spreken tegen clients, is het een no-brainer om dit in te stellen.

En de opstelling is echt gemakkelijkook. Je voegt gewoon een regel in de common_tls_context van je luisteraar:

alpn_protocollen: [ "h2,http/1.1" ]

Dat is het. (De aanhalingstekens moeten normale aanhalingstekens zijn, voor het geval WordPress er een zooitje van maakt)

ALPN staat voor Onderhandeling over protocol op de applicatielaag  - het is blijkbaar nodig om HTTP/2 te laten werken.

Standaard zal het http_connection_manager envoy filter zowel HTTP1 als HTTP2 ondersteunen in de modus AUTO.

Door de alpn_protocols toe te voegen maak je het mogelijk dat deze functionaliteit ook daadwerkelijk gebruikt kan worden.

Mijn envoy.yaml voor uw referentie

Ik ga reproduceren mijn hele envoy.yaml zodat je de context ziet waarin de regel moet worden geplaatst:

static_resresources:
   luisteraars:
   - adres:
       socket_address:
         adres: 0.0.0.0
         port_value: 80
     filter_ketens:
     - filters:
       - naam: envoy.http_connection_manager
         config:
           codec_type: auto
           stat_prefix: ingress_http
           route_config:
             virtual_hosts:
             - naam: backend
               domeinen: ["*"]
               routes:
               - match: { prefix: "/" }
                 omleiden:
                   path_redirect: "/"
                   https_redirect: true
           http_filters:
           - naam: envoy.router
             config: {}
   - adres:
       socket_address:
         adres: 0.0.0.0
         port_value: 443
     filter_ketens:
     - tls_context:
         common_tls_context:
           tls_certificaten:
           - certificate_chain: { bestandsnaam: "/etc/example-com.crt" }
             private_key: { bestandsnaam: "/etc/voorbeeld-com.key" }
           alpn_protocollen: [ "h2,http/1.1" ]
       filters:
       - naam: envoy.http_connection_manager
         config:
           stat_prefix: ingress_https
           route_config:
             virtual_hosts:
             - naam: backend
               domeinen: ["*"]
               routes:
               - match: { prefix: "/" }
                 route: { cluster: target_taxgod }
           http_filters:
           - naam: envoy.router
             config: {}
   clusters:
   - naam: target_taxgod
     connect_timeout: 0.25s
     type: strict_dns
     lb_policy: round_robin
     gastheren:
     - socket_address:
         adres: taxgod
         port_value: 3000
admin:
   access_log_path: "/tmp/envoy.log"
   adres:
     socket_address:
       adres: 0.0.0.0
       port_value: 9901

Deze envoy.yaml luistert op poort 80 en poort 443. HTTP verzoeken naar poort 80 worden omgeleid naar poort 443. Al het verkeer wordt gestuurd naar een docker container "taxgod" op hetzelfde docker netwerk. Raadpleeg dit artikel van mij voor details.

Verwacht a.u.b. niet dat het kopiëren van dit hele ding werkt - WordPress is helaas soms te slim voor zijn eigen bestwil, en knoeit met allerlei tekens en code-opmaak.

Referenties: