SlideShare a Scribd company logo
1 of 32
HTTP/2 in apache
今やニッチなapacheでHTTP/2を使う
村田智英(むらた ともひで)
- ソフトウェアエンジニア
- 株式会社セレス インフラグループマネージャ
@Derorisan
https://www.facebook.com/tomohide.murata.1
好きなもの: D言語, perl, emacs, fedoraOS
嫌いなもの: PHP, Oracle
apache使ってる人?
HTTP/2でできること
ページの表示が早くなります。
なんで?
- 1本のTCP接続の中に複数のストリームがある。
- server pushでhtmlを読み込むより先にコンテンツを送ることができる。(ヘッ
ダー内に仕込まれます。)
- https://http2.try-and-test.net/http2.html この辺みると詳しく載ってます。
前提条件
- TLS1.2必須
- apache2.4必須
それで困ること
- apache2.2からの脱却
- サイトをHTTPS化しなければならないため外部から取ってくる画像やJSがア
ウト。ADネットワークもHTTPSでなければならない。
- サーバの負荷はあがります。
でもさ。
web pushでもHTTPS必須だし。
googleもHTTPSのサイト優先するし。
最近はfastcgiでプログラムがサーバやるし。
もうそろそろネ。
apacheから脱却してH2O行ってもいいんじゃないかな。
でもいろいろモジュールいっぱいあって便利だし。
必要な装備
- apache2.4 latestをオススメ(今日の時点で2.4.23)
- openssl1.0.2以降
- livev
- jansson
- nghttp2
- https://http2.try-and-test.net/ いつもお世話になってます。
openssl
- 1.0.2jを使ってください。(1.1系はapacheが対応していません。まだー?)
- centos7ではまだ1.0.1eなので、自前でビルドする必要があります。
- fedora24であれば1.0.2jが配布されています。
- configure オプションはlinuxであれば下記の通り。prefixはお好きなように。
これでsshdはyumで入れてるopensslを使い、apacheではsourceから入れたものが使われるというカオス
な状態になります。
apache関係で使うツールはprefixを専用のところに入れておくのオヌヌメ。
$ ./Configure linux-x86_64 --shared
$ make -j4
$ sudo make install
$ ls /usr/local/ssl/
libev
- libeventのnext generationです。
- ここに詳しく載ってます。
http://qiita.com/janus_wel/items/51bbd7517ab237a0b65c
- yum(apt-getでも) でいいんじゃないですかね。
- 自前でビルドする場合もconfigure -> make -> make installでよいです。
jansson
- CのJSONパーサーです。
- yajlだったRapidJSONだったりおんなじようなものいっぱいあるんだよ。
- デファクトスタンダードください!
- ベンチマークによるとjanssonが一番はやい模様。
- YAMLにしろよ。matzに任せようぜ。rubyサイコー。(※rubyistではありません。
- これもパッケージで入れてしまってもおkです。
- どうせならsourceでいれるなら普通に./configure -> make -> make install
nghttp2
- https://nghttp2.org/ こちら。
ん?
もうあるやん。
Apacheいらない子。。。
気を取り直して。
nghttp2
- HTTP/2向けの部品がそろっています。Apacheが使うmod_http2もコチラに
入ってます。
- さっき入れたopensslやjanssonの場所を指定してあげないといけません。
- pkgconfigのPATHを設定
- $ export PKG_CONFIG=/usr/lib64/pkgconfig:/usr/local/lib/pkgconfig:/usr/local/ssl/lib/pkgconfig
- configure
- ZLIB_CFLAGS=-I/usr/include ¥
ZLIB_LIBS=-lz ¥
OPENSSL_CFLAGS="-I/usr/local/ssl/include" ¥
configure結果で下記を必ず確認しておくこと。
apr, apr-util
- apach2.4では分離されたのであらかじめ入れるか、apacheのconfigure時に
srclibに入れればおkです。今回は後者で。
apache2.4
なるべく新しい物を入れてください。
$ ./configure ¥
--prefix=/usr/local/httpd-2.4.23 --enable-cache --enable-mem-cache --enable-so --
enable-mods-shared=most --enable-ssl --with-include-apr ¥
--with-mpm=worker ¥
--enable-http2 ¥
--with-nghttp2=/usr/local ¥
--with-ssl=/usr/local/ssl
how2
https://httpd.apache.org/docs/2.4/howto/http2.html
証明書設定
タダでやりたければLet's Encrypt。
本番サーバ等には有料のものを使いましょう。DVだ
けです。今のところワイルドカードもありません。
手前味噌ですが、どうぞ。Let's Encrypt お試し
apache loadmodule
LoadModule http2_module modules/mod_http2.so
- 不要なモジュールと設定は抜いておくこと。これしないとH2Oに絶対勝てな
い。(いや勝てるか知らんけど。
virtualhost
- http2_moduleの設定
<IfModule http2_module>
ProtocolsHonorOrder On
Protocols h2 http/1.1 # 使うプロトコルの順番。h2:TLS, h2c:notTLS
H2Direct on # HTTP/1.1からのアップグレードではなくいきなりh2を使える。
Header add Link "</wp-content/themes/cat_wt/style.css>;rel=preload; as=style" #sever pushで送りたい
ものをヘッダーに。
</IfModule>
- サイファー使う順番の設定
SSLHonorCipherOrder on
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-
SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-
SHA256:ECDHE-ECDSA-AES128-SHA256:DHE-DSS-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-SHA256:DHE-RSA-AES128-
SHA256:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-DSS-AES256-SHA:DHE-RSA-AES128-
SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK
ブラウザでみてみる
他と比べて速度は?
- 環境や状況によって変わってくるのでなんとも・・・
- チューニングをしてやればH2Oに近づけるのではないかと。(試してないけど。
正直試してません!
この組み合わせはどんな場合に使う?
- 既存のサービスがapacheに深く依存している場合。
- ldap_moduleを使っているとか、mod_evasiveやmod_securityを使っているとか
- 大人の理由とか。
- 今時mod_phpとかmod_perl, Passenger とか使っていて脱却できない場合
- apacheが好きな場合
- 無難にapacheを選択しておく。
オススメの使い方
- やっぱりworkerで使う。preforkからの脱却
- ロードバランサとして使う。(mod_proxy_balancer)
シンプルに!
あれ?
H2Oでいいじゃん。
@Kazuhoさんがんばれー!
ご静聴ありがとうございました。

More Related Content

Similar to 20161017 みんてくapacheでhttp/2

Stuart attacking http2 implementations truefinal-jp
Stuart  attacking http2 implementations truefinal-jpStuart  attacking http2 implementations truefinal-jp
Stuart attacking http2 implementations truefinal-jpPacSecJP
 
httpbis interim とhttp2.0相互接続試験の話
httpbis interim とhttp2.0相互接続試験の話httpbis interim とhttp2.0相互接続試験の話
httpbis interim とhttp2.0相互接続試験の話shigeki_ohtsu
 
Rtshell入門
Rtshell入門Rtshell入門
Rtshell入門openrtm
 
ハイパフォーマンスブラウザネットワーキング 12章「HTTP 2.0」と現在の仕様
ハイパフォーマンスブラウザネットワーキング 12章「HTTP 2.0」と現在の仕様ハイパフォーマンスブラウザネットワーキング 12章「HTTP 2.0」と現在の仕様
ハイパフォーマンスブラウザネットワーキング 12章「HTTP 2.0」と現在の仕様hagino 3000
 
Status 425 HTTP/Tokyo
Status 425 HTTP/Tokyo Status 425 HTTP/Tokyo
Status 425 HTTP/Tokyo yuki-f
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目龍一 田中
 
WebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocketWebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocketYu Nobuoka
 
HTTP/2時代のウェブサイト設計
HTTP/2時代のウェブサイト設計HTTP/2時代のウェブサイト設計
HTTP/2時代のウェブサイト設計Kazuho Oku
 
IETF91 Honolulu httpbis WG Report
IETF91 Honolulu httpbis WG ReportIETF91 Honolulu httpbis WG Report
IETF91 Honolulu httpbis WG ReportKaoru Maeda
 
PHP懇親会発表資料
PHP懇親会発表資料PHP懇親会発表資料
PHP懇親会発表資料Sotaro Karasawa
 
Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話
Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話
Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話id774
 
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~ CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~ SEGADevTech
 
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料Yasutaka Hamada
 
第9回rest勉強会 ダウンロード・アップロード編
第9回rest勉強会 ダウンロード・アップロード編第9回rest勉強会 ダウンロード・アップロード編
第9回rest勉強会 ダウンロード・アップロード編ksimoji
 
Cent OS7 and RHELl7 update
Cent OS7 and RHELl7 updateCent OS7 and RHELl7 update
Cent OS7 and RHELl7 updateKazumi Hirose
 

Similar to 20161017 みんてくapacheでhttp/2 (20)

HTTP2入門
HTTP2入門HTTP2入門
HTTP2入門
 
Stuart attacking http2 implementations truefinal-jp
Stuart  attacking http2 implementations truefinal-jpStuart  attacking http2 implementations truefinal-jp
Stuart attacking http2 implementations truefinal-jp
 
httpbis interim とhttp2.0相互接続試験の話
httpbis interim とhttp2.0相互接続試験の話httpbis interim とhttp2.0相互接続試験の話
httpbis interim とhttp2.0相互接続試験の話
 
Rtshell入門
Rtshell入門Rtshell入門
Rtshell入門
 
ハイパフォーマンスブラウザネットワーキング 12章「HTTP 2.0」と現在の仕様
ハイパフォーマンスブラウザネットワーキング 12章「HTTP 2.0」と現在の仕様ハイパフォーマンスブラウザネットワーキング 12章「HTTP 2.0」と現在の仕様
ハイパフォーマンスブラウザネットワーキング 12章「HTTP 2.0」と現在の仕様
 
Status 425 HTTP/Tokyo
Status 425 HTTP/Tokyo Status 425 HTTP/Tokyo
Status 425 HTTP/Tokyo
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目
 
20120525 mt websocket
20120525 mt websocket20120525 mt websocket
20120525 mt websocket
 
WebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocketWebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocket
 
HTTP/2時代のウェブサイト設計
HTTP/2時代のウェブサイト設計HTTP/2時代のウェブサイト設計
HTTP/2時代のウェブサイト設計
 
IETF91 Honolulu httpbis WG Report
IETF91 Honolulu httpbis WG ReportIETF91 Honolulu httpbis WG Report
IETF91 Honolulu httpbis WG Report
 
PHP懇親会発表資料
PHP懇親会発表資料PHP懇親会発表資料
PHP懇親会発表資料
 
Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話
Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話
Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話
 
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~ CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
 
2009 PHP初心者
2009 PHP初心者2009 PHP初心者
2009 PHP初心者
 
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
 
20060520.tcp
20060520.tcp20060520.tcp
20060520.tcp
 
web server
web serverweb server
web server
 
第9回rest勉強会 ダウンロード・アップロード編
第9回rest勉強会 ダウンロード・アップロード編第9回rest勉強会 ダウンロード・アップロード編
第9回rest勉強会 ダウンロード・アップロード編
 
Cent OS7 and RHELl7 update
Cent OS7 and RHELl7 updateCent OS7 and RHELl7 update
Cent OS7 and RHELl7 update
 

20161017 みんてくapacheでhttp/2

Editor's Notes

  1. 主にバックエンドを担当しています。 linuxを使っています。
  2. apacheが好きな人? nginxが好きな人? 時代はH2Oだろ?って人? でもやっぱり仕事だとapacheになっちゃってる人? apacheでHTTP2使ってる人?
  3. 非同期イベントの通知とかしてくれるライブラリ群。 いろんなところで使われる。mysql, chromeなどでも。