SPDY с HAProxy и Nginx

Я использую HAProxy в качестве балансировщика нагрузки и для завершения SSL. За этим я разместил Nginx. Я хотел бы использовать spdy/3.1.

Он не работает со следующими haproxy.conf и nginx.cfg. (файлы серверные, но в соответствии с Плагин индикатора Chrome SPDY/HTTP2 это обычный трафик HTTP/1.1).

Я попытался зачистить ненужные части.

Что я делаю неправильно? Есть ли у вас советы по отладке?

(текущая версия HAProxy 1.6 и стабильная версия NginX 1.10)

haproxy.cfg:

global
  daemon
  tune.ssl.default-dh-param 2048

defaults
  mode tcp

frontend myfrontend
  bind *:80
  bind *:443 ssl crt /etc/ssl/certificate.pem npn spdy/3.1,http/1.1 ciphers ECDH+AESGCM:HIGH:!aNULL:!MD5:!DSS:!RC4; no-sslv3
  acl istoplevel path /
  redirect scheme https if istoplevel !{ ssl_fc }
  redirect location / if !istoplevel !{ ssl_fc }
  rspadd Strict-Transport-Security:\ max-age=31536000;
  default_backend mybackend

backend mybackend
  server s1 localhost:81
  option forwardfor
  http-request set-header X-Forwarded-Port %[dst_port]
  http-request add-header X-Forwarded-Proto https if { ssl_fc }

nginx.conf:

user  nginx;

http {
  include       /etc/nginx/mime.types;
  default_type  application/octet-stream;

  sendfile        on;
  #tcp_nopush     on;

  server {
    listen 81 spdy;
    root /usr/share/nginx/html;
    index index.html;

    location / {
      try_files $uri $uri/ /index.html;
    }
  }
}

person alsdkjasdlkja    schedule 10.07.2016    source источник
comment
Nginx построен с --with-http_v2-module. Включает ли это spdy? Документация не так многословна об этом   -  person alsdkjasdlkja    schedule 10.07.2016


Ответы (2)


Chrome больше не поддерживает SPDY: http://blog.chromium.org/2016/02/transitioning-from-spdy-to-http2.html?m=1

Во многих случаях он также не поддерживает HTTP/2: https://ma.ttias.be/day-google-chrome-disables-http2-nearly-everyone-may-31st-2016./

Также не имеет значения, что делает Nginx, если вы терминируете на HAproxy. Я не уверен, поддерживает ли HAproxy SPDY? В некоторых сообщениях предполагается, что со специальной конфигурацией, другие, что он ожидает HTTP/2.

В конечном итоге SPDY уходит. Когда даже его изобретатель не поддерживает его, вы понимаете, что проиграете битву. Вам было бы гораздо лучше перейти на HTTP/2.

person Barry Pollard    schedule 10.07.2016
comment
Я знаю, но основной модуль для модуля http/2 для nodejs поддерживает его только с TLS, и, поскольку я завершаю ssl в haproxy, я не могу его использовать. - person alsdkjasdlkja; 10.07.2016
comment
Откуда взялись nodejs!?! Вообще не упоминается в исходном вопросе. Это стоит за Nginx? В конечном счете, связь между HAproxy и Nginx и всем остальным, что у вас есть, не имеет значения. Вероятно, это будет настолько низкая задержка, что любое преимущество по сравнению с HTTP/1.1 будет иметь незначительное влияние. Что вас волнует, так это связь между клиентским браузером и HAProxy — заставьте это работать с SPDY или, предпочтительно, с HTTP/2, чтобы увидеть большинство преимуществ. Кстати, это не обязательно должен быть один протокол на всем протяжении, поскольку, как только вы завершаете SSL, вы также прекращаете соединение и с этого момента начинаете новое. - person Barry Pollard; 10.07.2016
comment
Nodejs — это еще один сервис помимо nginx, который балансирует нагрузку с помощью haproxy. Это не было частью вопроса, но я принял это во внимание, когда решил использовать SPDY, поэтому я упомянул об этом в комментарии. Ладно, тогда попробую http/2. Я думал, что это имеет смысл только в том случае, если у меня есть SPDY/http2 полностью :D Пока спасибо :) Я вернусь к вам, когда у меня возникнут проблемы - person alsdkjasdlkja; 10.07.2016
comment
Красиво, сработало. Спасибо! :) Сейчас использую HTTP/2. Было не слишком легко. Пришлось использовать debian:stretch, так как новый ALPN (поддержка NPN была прекращена в Google Chrome) требует openssl 1.0.2. - person alsdkjasdlkja; 11.07.2016

Вам нужно будет использовать ALPN для Chrome. Для HAProxy вам потребуется версия 1.8 для поддержки завершения работы с HTTP2.

Вот соответствующая конфигурация для HTTP2 и ALPN из балансировщика нагрузки CertSimple с HTTP/2. и руководство по динамической перенастройке:

frontend public
    # HTTP/2 - see https://www.haproxy.com/blog/whats-new-haproxy-1-8/
    bind :443 ssl crt /etc/https/cert-and-private-key-and-intermediate-and-dhparam.pem alpn h2,http/1.1
person mikemaccana    schedule 05.01.2018