envoy als http 2 Frontproxy - Aktivierung von http 2 für envoy (auch bekannt als h2)

Standardmäßig ist envoy nicht für den Aufbau von Verbindungen mit Clients konfiguriert, die sich mit dem neuen HTTP/2 verbinden.

HTTP/2 ist für das moderne Web optimiert, mit binären Headern usw. - höhere Geschwindigkeit.

Da envoy in der Lage ist, HTTP/2 an Clients weiterzugeben, ist es ein Kinderspiel, es einzurichten.

Und die Einrichtung ist wirklich einfachauch. Sie fügen einfach hinzu eine Zeile in der common_tls_context Ihres Hörers:

alpn_protocols: [ "h2,http/1.1" ]

Das war's. (Die Anführungszeichen sollten normale Anführungszeichen sein, für den Fall, dass WordPress diese durcheinander bringt)

ALPN steht für Aushandlung von Protokollen auf der Anwendungsschicht  - Es wird offenbar benötigt, damit HTTP/2 funktioniert.

Standardmäßig unterstützt der http_connection_manager envoy-Filter sowohl HTTP1 als auch HTTP2 im Modus AUTO.

Durch Hinzufügen der alpn_protocols können Sie diese Funktionalität tatsächlich nutzen.

Meine envoy.yaml für Ihre Referenz

Ich werde Folgendes wiedergeben meine gesamte envoy.yaml Sie sehen also den Kontext, in den die Zeile eingeordnet werden muss:

statische_Ressourcen:
   Hörer:
   - Adresse:
       socket_address:
         Adresse: 0.0.0.0
         port_wert: 80
     filter_chains:
     - Filter:
       - Name: envoy.http_connection_manager
         Konfiguration:
           codec_type: auto
           stat_prefix: ingress_http
           route_config:
             virtuelle_hosts:
             - Name: Backend
               Domänen: ["*"]
               Routen:
               - übereinstimmen: { prefix: "/" }
                 umleiten:
                   path_redirect: "/"
                   https_redirect: true
           http_filters:
           - Name: envoy.router
             Konfig: {}
   - Adresse:
       socket_address:
         Adresse: 0.0.0.0
         port_wert: 443
     filter_chains:
     - tls_context:
         common_tls_context:
           tls_zertifikate:
           - certificate_chain: { filename: "/etc/example-com.crt" }
             private_key: { Dateiname: "/etc/example-com.key" }
           alpn_protocols: [ "h2,http/1.1" ]
       Filter:
       - Name: envoy.http_connection_manager
         Konfiguration:
           stat_prefix: ingress_https
           route_config:
             virtuelle_hosts:
             - Name: Backend
               Domänen: ["*"]
               Routen:
               - übereinstimmen: { prefix: "/" }
                 Route: { cluster: target_taxgod }
           http_filters:
           - Name: envoy.router
             Konfig: {}
   Clustern:
   - Name: target_taxgod
     connect_timeout: 0.25s
     Typ: strict_dns
     lb_policy: round_robin
     Gastgeber:
     - socket_address:
         Anschrift: taxgod
         port_value: 3000
admin:
   access_log_path: "/tmp/envoy.log"
   Adresse:
     socket_address:
       Adresse: 0.0.0.0
       port_wert: 9901

Diese envoy.yaml lauscht auf Port 80 und Port 443. HTTP-Anfragen an Port 80 werden an Port 443 umgeleitet. Der gesamte Verkehr wird an einen Docker-Container "taxgod" im selben Docker-Netzwerk gesendet. Einzelheiten finden Sie in diesem Artikel von mir.

Erwarten Sie bitte nicht, dass das Kopieren und Einfügen funktioniert - WordPress ist leider manchmal zu schlau für sein eigenes Wohl und bringt alle möglichen Zeichen und Code-Formatierungen durcheinander.

Referenzen: