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 :
- https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation
- https://www.envoyproxy.io/docs/envoy/latest/api-v2/config/filter/network/http_connection_manager/v2/http_connection_manager.proto#enum-config-filter-network-http-connection-manager-v2-httpconnectionmanager-codectype
- https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/ssl.html?highlight=common
- https://www.envoyproxy.io/docs/envoy/latest/api-v2/api/v2/auth/cert.proto.html?highlight=common#auth-commontlscontext -> J'ai obtenu l'information sur la façon de configurer correctement alpn (où le mettre dans le fichier de configuration, et ce qu'il faut y mettre) d'ici
- https://github.com/envoyproxy/envoy/issues/3394 -> cela m'a fait commencer dans la bonne direction. Je n'avais jamais entendu parler de l'ALPN avant de lire ceci.