Назад | Перейти на главную страницу

Как выбрать другой бэкэнд на основе URI при использовании «режима tcp»

Я использую haproxy версии 1.6.2

Я включил http2, используя конфигурацию ниже, в которой мне нужно использовать «режим tcp». Но как только я переключился с "режима http" на "режим tcp", я не смог использовать acl path_beg для

frontend websocks
    mode tcp
    bind *:443 ssl crt /etc/certs/domain.pem alpn h2,http/1.1 ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH; no-sslv3
    timeout client 1h
    acl is_api path_beg /api
    acl is_xmpp path_beg /chat
    use_backend api_backend if is_api
    use_backend xmpp_backend if is_xmpp
    use_backend fe_public_tcp if { ssl_fc_alpn -i h2 }
    default_backend fe_public

fe_public
    server fe1 localhost:444 weight 1 maxconn 4096 check inter 10000 ssl verify none        

fe_public_tcp
    mode tcp
    server fe1 localhost:445

api_backend
    server api1 localhost:9966

xmpp_backend
    server xmpp1 localhost:9955

Как мне снова заставить path_beg и http2 работать? или есть способ включить http2 без режима tcp?

Чтобы использовать специфические особенности протокола, вы должны использовать соответствующий режим. Режим tcp дает вам доступ только к определенным функциям tcp, но для получения конкретных функций http, таких как выбор серверной части на основе URI, вам необходимо иметь режим http.

К сожалению, HTTP / 2 сильно отличается от HTTP / 1.x и в настоящее время не поддерживается режимом http, поэтому вы должны использовать режим tcp. Это также означает, что вы не можете принимать никаких решений на основе URI, если хотите поддерживать HTTP / 2.

Лучшая поддержка HTTP / 2 ожидается с haproxy версии 1.7. Из http://www.haproxy.org/news.html:

15 мая 2015 г .: HTTP / 2 отсутствует!

Сегодня HTTP / 2 официально существует как RFC7540 и RFC7541. ... Версия 1.6 пока не будет поддерживать HTTP / 2 ... Мы рассчитываем поддержать ее к концу года, во время цикла разработки 1.7.