In der HAproxy-Dokumentation heißt es konkret in diesem 1.1. The HTTP transaction model
Abschnitt:
Standardmäßig arbeitet HAProxy in Bezug auf persistente Verbindungen in einem tunnelartigen Modus: Für jede Verbindung verarbeitet es die erste Anforderung und leitet alles andere (einschließlich zusätzlicher Anforderungen) an den ausgewählten Server weiter. Sobald die Verbindung hergestellt ist, bleibt sie sowohl auf der Client- als auch auf der Serverseite bestehen. Verwenden Sie die Option "http-server-close", um die persistenten Clientverbindungen beizubehalten, während Sie jede eingehende Anforderung einzeln bearbeiten und nacheinander an Server im HTTP-Schließen-Modus weiterleiten. Verwenden Sie die Option "httpclose", um beide Seiten in den HTTP-Modus "Schließen" zu schalten. "Option forceclose" und "Option http-pretend-keepalive" helfen dabei, Server zu umgehen, die sich im HTTP-Schließen-Modus fehlerhaft verhalten.
Sie haben die http-keep-alive
Direktive definiert und keinen der oben beschriebenen Parameter verwendet. Daher müssen Sie im Tunnelmodus arbeiten (außerdem habe ich mehrere HAproxy-Konfigurationen, die Ihren sehr ähnlich sind, und ich kann Ihnen versichern, dass sie wie in der Dokumentation beschrieben funktioniert).
Ich denke, der Täter ist die Art und Weise, wie Sie curl
Ihre Konfiguration testen. Sie übergeben das -x
Flag, was bedeutet, dass Sie den nächsten Parameter als Proxy verwenden möchten. HAproxy verhält sich jedoch bereits so. Die Anfrage sollte also so aussehen:
curl 'http://127.0.0.1:4443/v2.4/me?fields=id%2Cname&access_token=CAACEdEose0cBAPvPqQIAjacV1whsrRfcchVVOXZAgi9ZC56HBVOh5PfI9IZBA12nAmsu9Q9Pznv1e6iZBsnbr4u2nCASnvZBGimBjdWErUXTRQetn0fdV0HLZB68tS0idelR35ybiWnehK5oec9dM9LxjRvFwTpuHSUkeA9nBAyFZBrGf4FcZAXuhT2uj5vjbvYkzupyi4mBFlBGfBEIjpeb
Auf diese Weise senden Sie die Anfrage direkt an HAproxy und verwenden HAproxy nicht als Proxy (da sich dies auf diese Weise verhält).