У меня есть HaProxy, завершающий SSL и передающий запросы обратно в лак, который затем обслуживает кэшированную страницу или запросы от Nginx. Тем не менее, Varnish, похоже, обрабатывает запрос от HaProxy как HTTP/1, а не HTTP/2 и не может служить.Использовать протокол прокси-протокола 1
я могу видеть в Nginx входит следующее, когда я пытаюсь попасть на страницу:
" while reading PROXY protocol, client: 127.0.0.1, server: 127.0.0.1:8181
2016/08/11 06:53:31 [error] 5682#0: *1 broken header: "GET/HTTP/1.1
Host: www.example.com
User-Agent: curl/7.50.2-DEV
Accept: */*
X-Forwarded-For: IP_Removed
Accept-Encoding: gzip
X-Varnish: 32777
Я нашел то, что относится к этому here в котором говорится, что причиной этого является то, что Nginx не работать с v2 PROXY только v1. Таким образом, в результате этого я принудительно использовал протокол 1 в HaProxy, используя переключатель send-proxy, а не send-proxy-v2. Но когда он доходит до Лака, я думаю, что Varnish каким-то образом преобразует это в протокол 2, который заставляет его некорректно общаться с Nginx.
Я удалил Лак из уравнения и связал HaProxy напрямую с Nginx, и он отлично работает через HTTP/2. Проблема заключается в том, что что-то происходит в стеке Varnish, и вероятным подозреваемым является прокси-протокол v2, используемый лаком.
Итак, чтобы сократить длинную историю, как я могу заставить Лак придерживаться PROXY1, а не протокола PROXY2? Я попытался добавить PROXY1 в параметры запуска, но Varnish этого не примет. Любая помощь приветствуется. Благодаря!
UPDATE - Я проверил HaProxy> Nginx с переключателем send-proxy-v2 на бэкэнд HaProxy, и это вызывает ту же проблему, когда в стек попадает Varnish. Проблема с возвратом в send-proxy на HaProxy устраняет проблему. Итак, я убежден, что проблема заключается в использовании лака с использованием протокола 2, а не протокола 1. Но как сказать это не так?
Вы уверены, что вы говорите о HTTP/2? Это не связано с протоколом PROXY v2. Лак не говорит HTTP/2, это будет в Varnish 5.x. –
Возможно, я запутался, но я понимаю, что HaProxy работает как TCP не HTTP при работе с HTTP/2, поэтому необходимо использовать send-proxy с бэкэнд. Nginx настроен на получение этого с помощью переключателя proxy_protocol. Я понимаю, что Varnish не HTTP/2 или не SSL, но он должен передавать протокол обратно, как и Nginx no? – d1ch0t0my