使用 HAProxy 和 Nginx 的 SPDY
SPDY with HAProxy and Nginx
我正在使用 HAProxy 作为负载均衡器并终止 SSL。在它后面我放置了一个 Nginx。我想使用 spdy/3.1.
它不适用于以下 haproxy.conf 和 nginx.cfg。 (文件是 serverd 但根据 Chrome SPDY/HTTP2 Indicator Plugin 这只是正常的 HTTP/1.1 流量)。
我试着去掉了不需要的部分。
我做错了什么?您有调试技巧吗?
(HAProxy 1.6 current and NginX 1.10 stable line)
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;
}
}
}
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/
此外,如果您终止于 HAproxy,Nginx 正在做什么并不重要。我不确定 HAproxy 是否支持 SPDY?一些帖子建议它 does with special config,其他帖子建议它 HTTP/2。
最终,SPDY 即将退出。当连它的发明者都不支持它时,您就知道您将输掉这场战斗。你最好继续 HTTP/2.
您需要为 Chrome 使用 ALPN。对于 HAProxy,您需要 1.8 才能支持 HTTP2 终止。
这是来自 CertSimple load balancer with HTTP/2 and dynamic reconfig 指南的 HTTP2 和 ALPN 的相关配置:
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
我正在使用 HAProxy 作为负载均衡器并终止 SSL。在它后面我放置了一个 Nginx。我想使用 spdy/3.1.
它不适用于以下 haproxy.conf 和 nginx.cfg。 (文件是 serverd 但根据 Chrome SPDY/HTTP2 Indicator Plugin 这只是正常的 HTTP/1.1 流量)。
我试着去掉了不需要的部分。
我做错了什么?您有调试技巧吗?
(HAProxy 1.6 current and NginX 1.10 stable line)
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;
}
}
}
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/
此外,如果您终止于 HAproxy,Nginx 正在做什么并不重要。我不确定 HAproxy 是否支持 SPDY?一些帖子建议它 does with special config,其他帖子建议它 HTTP/2。
最终,SPDY 即将退出。当连它的发明者都不支持它时,您就知道您将输掉这场战斗。你最好继续 HTTP/2.
您需要为 Chrome 使用 ALPN。对于 HAProxy,您需要 1.8 才能支持 HTTP2 终止。
这是来自 CertSimple load balancer with HTTP/2 and dynamic reconfig 指南的 HTTP2 和 ALPN 的相关配置:
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