Nach Aktivierung von http/2 in Nginx explodiert die Last auf dem Server. Requests werden gefühlt endlos erneut abgesetzt:
Problem ist lokalisiert und ein Workaround fertig.
Die Ursache ist (unserer Ansicht nach) ein Fehler in NGINX. Konkret tritt dieses Verhalten dann auf, wenn NGINX mit HTTP/2 als Reverse-Proxy genutzt wird. Wenn der ursprüngliche (HTTP/1.1-)Server eine Antwort sendet, dann enthält diese i.d.R. den Header "Connection: keep-alive".
Mit HTTP/2 ist dieser Header verboten - allerdings leitet NGINX diesen ungefiltert an die HTTP/2-Verbindung durch. Einige Clients wie u.a. Apple Webkit (Safari) oder auch cURL brechen dann die Verbindung ab.
Die Lösung (ab v2.5.1-r4755) besteht vorerst darin, dass LiveConfig bei NGINX-Reverse-Proxy-vHosts HTTP/2 nicht aktiviert.
NGINX bringt von Haus aus leider keine Möglichkeit mit, HTTP-Header aus einer Proxy-Antwort herauszufiltern. Lediglich ein 3rd-Party-Modul namens ngx_headers_more kann das. Jetzt gibt es eine gute und eine schlechte Nachricht...
Die gute Nachricht: in Debian 9 ist dieses Modul über das Paket libnginx-mod-http-headers-more-filter relativ einfach nachinstallierbar.
Die schlechte Nachricht: NGINX unterstützt keine Form von "IfModule" in der Konfiguration. LiveConfig muss also die vHost-Konfigurationen zwingend neu erstellen, wenn dieses Modul verfügbar (oder auch nicht mehr verfügbar) ist.
Viele Grüße
-Klaus Keppler