envoy come proxy anteriore http 2 - abilitare http 2 per envoy (aka h2)

Out of the box envoy non è configurato per impostare le connessioni con i client che si connettono ad esso con il nuovo HTTP/2.

HTTP/2 è ottimizzato per il web moderno, con intestazioni binarie, ecc. - maggiore velocità.

Dal momento che envoy è in grado di parlare HTTP/2 ai client, è un gioco da ragazzi impostarlo.

E l'impostazione è davvero facile, anche. Basta aggiungere uno nella linea common_tls_context del vostro ascoltatore:

alpn_protocols: [ "h2,http/1.1" ]

Questo è tutto. (Le virgolette dovrebbero essere virgolette normali, nel caso in cui WordPress le incasini)

ALPN sta per Negoziazione del protocollo a livello di applicazione  - è apparentemente necessario per far funzionare HTTP/2.

Per impostazione predefinita, il filtro http_connection_manager envoy supporta sia HTTP1 che HTTP2 nella modalità AUTO.

Aggiungendo l'alpn_protocols permettete a questa funzionalità di essere effettivamente utilizzata.

Il mio envoy.yaml per il vostro riferimento

Ho intenzione di riprodurre il mio intero envoy.yaml Così vedete il contesto in cui la linea deve essere messa:

risorse statiche:
   ascoltatori:
   - indirizzo:
       indirizzo_presa:
         indirizzo: 0.0.0.0
         valore della porta: 80
     catene_di_filtri:
     - filtri:
       - nome: envoy.http_connection_manager
         config:
           tipo di codec: auto
           prefisso statico: ingress_http
           route_config:
             virtual_hosts:
             - nome: backend
               domini: ["*"]
               percorsi:
               - match: { prefix: "/" }
                 reindirizzare:
                   path_redirect: "/"
                   https_redirect: vero
           http_filters:
           - nome: envoy.router
             config: {}
   - indirizzo:
       indirizzo_presa:
         indirizzo: 0.0.0.0
         valore_porta: 443
     catene_di_filtri:
     - tls_context:
         common_tls_context:
           tls_certificati:
           - certificate_chain: { filename: "/etc/example-com.crt" }
             private_key: { nome file: "/etc/example-com.key" }
           alpn_protocols: [ "h2,http/1.1" ]
       filtri:
       - nome: envoy.http_connection_manager
         config:
           prefisso statico: ingress_https
           route_config:
             virtual_hosts:
             - nome: backend
               domini: ["*"]
               percorsi:
               - match: { prefix: "/" }
                 route: { cluster: target_taxgod }
           http_filters:
           - nome: envoy.router
             config: {}
   gruppi:
   - nome: target_taxgod
     connect_timeout: 0.25s
     tipo: strict_dns
     lb_policy: round_robin
     ospiti:
     - indirizzo_presa:
         indirizzo: taxgod
         valore_porta: 3000
admin:
   percorso_log_accesso: "/tmp/envoy.log"
   indirizzo:
     indirizzo_presa:
       indirizzo: 0.0.0.0
       valore_porta: 9901

Questo envoy.yaml ascolta sulla porta 80 e sulla porta 443. Le richieste HTTP alla porta 80 sono reindirizzate alla porta 443. Tutto il traffico viene inviato a un contenitore docker "taxgod" sulla stessa rete docker. Fate riferimento a questo mio articolo per i dettagli.

Per favore non aspettatevi che il copia-incolla di tutta questa cosa funzioni - WordPress purtroppo è troppo intelligente per il suo stesso bene a volte, e incasina tutti i tipi di caratteri e la formattazione del codice.

Riferimenti: