envoy comme proxy frontal http 2 - activer http 2 pour envoy (aka h2)

L'Envoyé n'est pas configuré pour établir des connexions avec les clients qui se connectent à lui avec le nouveau HTTP/2.

HTTP/2 est optimisé pour le web moderne, avec des en-têtes binaires, etc. - une vitesse plus élevée.

Puisque envoy est capable de parler de HTTP/2 aux clients, il n'est pas difficile de le mettre en place.

Et l'installation est vraiment facileégalement. Il suffit d'ajouter un dans le common_tls_context de votre listener :

alpn_protocols : [ "h2,http/1.1" ]

C'est tout. (Les guillemets doivent être des guillemets normaux, au cas où WordPress s'y perdrait).

ALPN est synonyme de Négociation du protocole de la couche d'application  - elle est apparemment nécessaire pour que HTTP/2 fonctionne.

Par défaut, le filtre envoy http_connection_manager prend en charge HTTP1 et HTTP2 en mode AUTO.

En ajoutant les alpn_protocols, vous permettez à cette fonctionnalité d'être réellement utilisée.

Mon envoy.yaml pour votre référence

Je vais reproduire mon envoy.yaml complet donc vous voyez le contexte dans lequel la ligne doit être placée :

ressources_statiques :
   des auditeurs :
   - l'adresse :
       adresse_socle :
         adresse : 0.0.0.0
         valeur_du_port : 80
     chaînes de filtres :
     - filtres :
       - nom : envoy.http_connection_manager
         config :
           codec_type : auto
           stat_prefix : ingress_http
           route_config :
             virtual_hosts :
             - nom : backend
               domaines : ["*"]
               routes :
               - match : { préfixe : "/" }
                 réorienter :
                   path_redirect : "/"
                   https_redirect : true
           http_filters :
           - nom : envoy.router
             config : {}
   - l'adresse :
       adresse_socle :
         adresse : 0.0.0.0
         port_value : 443
     chaînes de filtres :
     - tls_context :
         common_tls_context :
           tls_certificats :
           - certificate_chain : { filename : "/etc/example-com.crt" }
             private_key : { filename : "/etc/example-com.key" }
           alpn_protocols : [ "h2,http/1.1" ]
       filtres :
       - nom : envoy.http_connection_manager
         config :
           stat_prefix : ingress_https
           route_config :
             virtual_hosts :
             - nom : backend
               domaines : ["*"]
               routes :
               - match : { préfixe : "/" }
                 route : { cluster : target_taxgod }
           http_filters :
           - nom : envoy.router
             config : {}
   clusters :
   - nom : target_taxgod
     connect_timeout : 0.25s
     type : strict_dns
     lb_policy : round_robin
     hôtes :
     - adresse_socle :
         adresse : taxgod
         valeur_du_port : 3000
admin :
   access_log_path : "/tmp/envoy.log"
   l'adresse :
     adresse_socle :
       adresse : 0.0.0.0
       valeur_du_port : 9901

Ce envoy.yaml écoute sur le port 80 et le port 443. Les requêtes HTTP sur le port 80 sont redirigées vers le port 443. Tout le trafic est envoyé à un conteneur docker "taxgod" sur le même réseau docker. Reportez-vous à cet article de moi pour plus de détails.

Ne vous attendez pas à ce que le copier-coller de ce document fonctionne - WordPress est malheureusement trop intelligent pour son propre bien parfois, et il se trompe dans toutes sortes de caractères et de formatage de code.

Références :