Согласно документации HAproxy, конкретно в 1.1. The HTTP transaction model
разделе, говорит следующее:
По умолчанию HAProxy работает в туннельном режиме в отношении постоянных соединений: для каждого соединения он обрабатывает первый запрос и перенаправляет все остальное (включая дополнительные запросы) на выбранный сервер. После установления соединение сохраняется как на стороне клиента, так и на стороне сервера. Используйте параметр «http-server-close», чтобы сохранить постоянные соединения клиента при индивидуальной обработке каждого входящего запроса, отправляя их один за другим на серверы в режиме HTTP close. Используйте «параметр httpclose», чтобы переключить обе стороны в режим закрытия HTTP. «option forceclose» и «option http-pretend-keepalive» помогают работать с серверами, которые плохо работают в режиме закрытия HTTP.
Вы определили http-keep-alive
директиву и не использовали ни один из описанных выше параметров, поэтому вы должны работать в туннельном режиме (кроме того, у меня есть несколько конфигураций HAproxy, очень похожих на вашу, и я могу заверить вас, что это работает, как сказано в документации).
Я думаю, что виновником является то, как вы используете curl
для тестирования вашей конфигурации. Вы передаете ему -x
флаг, который означает, что вы хотите использовать следующий параметр в качестве прокси, однако HAproxy уже действует как это. Поэтому запрос должен быть примерно таким:
curl 'http://127.0.0.1:4443/v2.4/me?fields=id%2Cname&access_token=CAACEdEose0cBAPvPqQIAjacV1whsrRfcchVVOXZAgi9ZC56HBVOh5PfI9IZBA12nAmsu9Q9Pznv1e6iZBsnbr4u2nCASnvZBGimBjdWErUXTRQetn0fdV0HLZB68tS0idelR35ybiWnehK5oec9dM9LxjRvFwTpuHSUkeA9nBAyFZBrGf4FcZAXuhT2uj5vjbvYkzupyi4mBFlBGfBEIjpeb
Таким образом, вы отправляете запрос непосредственно в HAproxy и не используете HAproxy в качестве прокси (потому что он будет вести себя так же).