2015-08-26
HAProxyでHTTP/2のTLS終端する際のALPN設定
HAProxy 1.5でALPNに対応していた。
HTTP/2 over TLSの通信を、HAProxyでTLSを終端することで、TLS対応を行わないであろうVarnishなどでもh2c接続が可能となる。
(HAProxy自体のhttp2対応はまだ先)
今回はバックエンドにNginxをh2cでリッスンさせて試してみた
構成
構成としては以下の図のとおりである。
HAproxyはTLSの終端のみを行い、中身のメッセージをそのままバックエンドに送信する。この時HAProxyはHTTP/2の処理は行わない。
バックエンドのNginxはh2cのダイレクトで通信を受け付ける。
HAProxyの設定
- bindでalpn h2を指定する
- if { ssl_fc_alpn -i h2 }で、h2ならh2cのバックエンドへ、そうでなければhttp/1.1のバックエンドへ
(opensslのバージョンが足りないとALPN使えません)
haproxy.cfg
frontend tls_proxy bind *:443 name https ssl crt /etc/haproxy/ssl/server.pem alpn h2 ciphers AESGCM:HIGH:!aNULL:!MD5 mode tcp use_backend nginx-h2c if { ssl_fc_alpn -i h2 } default_backend nginx backend nginx balance roundrobin server nginx1 localhost:8080 check inter 2000 send-proxy backend nginx-h2c balance roundrobin server nginx1 localhost:8081 check inter 2000 send-proxy
Nginxの設定
今回はnginx 1.9.4 http2パッチv3
- 8080番ポートでhttp/1.1
- 8081番ポートでh2cダイレクト
nginx.conf
server { listen 8080 proxy_protocol; server_name localhost; location / { root /usr/share/www; } } server { listen 8081 http2 proxy_protocol; server_name localhost; location / { root /usr/share/www; } }
アクセスログ
http2対応ブラウザと、そうじゃないブラウザでHAProxyにhttpsでアクセスすると
127.0.0.1 - - [27/Aug/2015:01:10:47 +0900] "GET / HTTP/1.1" 404 640 "-" h2:h2c 127.0.0.1 - - [27/Aug/2015:01:10:49 +0900] "GET / HTTP/1.1" 404 570 "-" h2:
http2対応ブラウザではh2c側に振り分けられ
http2非対応ブラウザだとhttp/1.1側に振り分けられてる事が確認できる
トラックバック - http://d.hatena.ne.jp/ASnoKaze/20150826/1440605825
リンク元
- 658 https://www.google.co.jp/
- 213 https://www.google.co.jp
- 46 https://www.google.com/
- 32 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCQQFjAA&url=http://d.hatena.ne.jp/ASnoKaze/20150821/1440164643&ei=MXreVdmcM-qL4AGdMw&usg=AFQjCNEvK9_KCTpOU4ENqx5BpleeFwrjbQ
- 25 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&frm=1&source=web&cd=1&ved=0CB0QFjAAahUKEwijh6j6yMjHAhWJFpQKHUfDDH4&url=http://d.hatena.ne.jp/ASnoKaze/20150312/1426131556&ei=ZqXeVaO8CYmt0ATHhrPwBw&usg=AFQjCNFy3EOB_q5echBwExCJkkmouzRKXg
- 19 http://www.google.co.jp/url?url=http://d.hatena.ne.jp/ASnoKaze/20150818/1439896998&rct=j&q=&esrc=s&sa=U&ved=0CDQQFjAEahUKEwjyqJSc_8jHAhUnlKYKHb9IBhk&usg=AFQjCNG-N-35SEC7y7VemhpsYfouoT2otw
- 16 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&ved=0CC0QFjACahUKEwjKkui5gMjHAhXHHZQKHZfCACs&url=http://d.hatena.ne.jp/ASnoKaze/20150512/1431448141&ei=X1neVYrnIMe70ASXhYPYAg&usg=AFQjCNHI3cDbhrlaoG4oIf6bpI5Jtyb_gQ
- 14 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&sqi=2&ved=0CCQQFjABahUKEwiz0_qLwMrHAhWFjZQKHe19Ats&url=http://d.hatena.ne.jp/ASnoKaze/20141006/1412605557&ei=iqjfVbPmK4Wb0gTt-4nYDQ&usg=AFQjCNFdv-bdaJJ-akTX0k181PRUXe7ZOQ
- 5 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&ved=0CDgQFjAEahUKEwiI6YWE7cjHAhUi26YKHQecDog&url=http://d.hatena.ne.jp/ASnoKaze/20140804/1407167636&ei=OsveVYjkDqK2mwWHuLrACA&usg=AFQjCNFiye-xYqcslDFjSlrB9lCrLp99RQ
- 3 http://search.yahoo.co.jp/search?p=http2+ヘッダ&aq=-1&oq=&ei=UTF-8&fr=top_ga1_sa&x=wrt