SlideShare a Scribd company logo
HTTP/2 in nginx
Yoko TAMADA @tmd45
2016-03-11 feedforce Inc.
第一部:WWW 通信プロトコル基礎
     〜 HTTP/1.1 を振り返る
第二部:高速化の歩み 〜 SPDY 実験
第三部:16 年ぶりの新鋭 HTTP/2 !
今回のお話
… は、1時間くらいかかるし、あちこちで聞き
まくって飽きたのでやめました。
「やっぱり動かしてみよう」と思い立って3日、
思った以上にさっくり動いたのでそんな話と某
所で聞いた注意点など
そういえば
● HTTP/2 って必要なの?
○ もはや論じる余地なし
○ むずかしい話は端折りますけど、
HTTP/1 から HTTP/1.1 にしなかっ
た人がいますか?
■ いるかもしれんけど(涙)
○ 対応時期を考える必要はあれども、
今後絶対に対応必須です!
● 用意したサーバ
○ ConoHa
■ GMO のオール SSD クラウド VPS
■ メモリ 1GB, 2 Core, SSD 50GB 底辺プラン
○ CentOS 7.2
○ 作業用ユーザ作成して SSH ログイ
ンしたぞ
前提
● ソースコードからビルド; nginx-build
● 安全な HTTPS 通信設定
● HTTP/2 の利用
アジェンダ
nginx-build
● nginx-build を使おう
○ https://github.com/cubicdaiya/nginx-build
● go get するので go の準備から
nginx をソースコードからビルドする
go get nginx-build
# cd /usr/local/src
# wget https://storage.googleapis.com/golang/go1.6.linux-
amd64.tar.gz
# tar -C /usr/local/ -xzf go1.6.linux-amd64.tar.gz
# echo "export PATH=$PATH:/usr/local/go/bin" >> /etc/profile
$ mkdir ~/golang
$ echo "export GOPATH=$HOME/golang" >> ~/.bashrc
$ echo "export PATH=$PATH:$GOPATH/bin" >> ~/.bashrc
$ go get -u github.com/cubicdaiya/nginx-build
● ビルドに必要なパッケージ
○ gcc
○ wget, git, mercurial
● HTTP モジュールで必要になるライブラリ
○ pcre-devel /* 正規表現 */
○ zlib-devel /* gzip 圧縮 */
○ openssl-devel /* SSL/TLS */
yum install
# mkdir ~/nginx
# vi ~/nginx/configure
Custom configuration
#!/bin/sh
./configure 
--sbin-path=/usr/sbin/nginx 
--conf-path=/etc/nginx/nginx.conf 
--with-http_gzip_static_module 
--with-http_ssl_module 
--with-http_v2_module
# vi ~/nginx/module3rd.cfg
3rd-party module
[headers-more-nginx-module]
form=git
url=https://github.com/openresty/headers-more-nginx-module.git
rev=v0.29
$ mkdir work
$ nginx-build -d work [-v 1.9.12] 
-c nginx/configure -m nginx/module3rd.cfg
nginx-build: 0.7.1
Compiler: gc go1.6
2016/03/09 00:39:09 Download nginx-1.9.12.....
...
2016/03/09 00:39:29 Enter the following command for install
nginx.
$ cd work/nginx/1.9.12/nginx-1.9.12
$ sudo make install
build & make install
$ nginx -V
nginx version: nginx/1.9.12
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --sbin-path=/usr/sbin/nginx --conf-
path=/etc/nginx/nginx.conf --with-http_gzip_static_module --
with-http_ssl_module --with-http_v2_module --add-module=..
/headers-more-nginx-module
nginx の構成確認
● 問題点
○ CentOS 7 の systemd でサービス管理す
るためのファイル nginx.service が生成さ
れない
○ systemctl enable nginx.service できない
○ 自分で作る(今回はまだやってない)
$ sudo nginx
$ sudo nginx -s stop
nginx 起動と停止
HTTPS 通信設定
最低限の HTTPS 通信設定
server {
listen 443 default_server ssl;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
...
}
/etc/nginx/conf.d/example.com.conf
余談; SSL 証明書 ~Let's Encrypt!
● 使ってみた → 超簡単
$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt/
$ ./letsencrypt-auto --help
※ DNS 設定済み, nginx 停止中
$ ./letsencrypt-auto certonly -a standalone 
-d example.com -d www.example.com
※ TUI が起動 → メアド入力&規約同意
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/example.com/fullchain.pem. Your cert will
expire on 2016-06-08. To obtain a new version of the certificate in
the future, simply run Let's Encrypt again.
● Mozilla SSL Configuration Generator
○ https://mozilla.github.io/server-side-tls/ssl-
config-generator/
安全な HTTPS 通信設定
安全な HTTPS 通信設定
server {
listen 443 default_server ssl;
server_name example.net www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:5m;
ssl_session_tickets off;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-
CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-
AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security max-age=15768000;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
/etc/nginx/conf.d/example.com.conf
● 各ディレクティブの解説
○ 『nginx 実践入門』オススメ
■ 暗号化スイート
■ HSTS
■ 安全性と互換性のバランスについ
て(ただし書籍執筆時点)
安全な HTTPS 通信設定
HTTP/2
HTTP/2 の有効化
server {
listen 443 default_server ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
...
}
/etc/nginx/conf.d/example.com.conf
これだけ!
● nginx 1.9.5 〜(now 1.9.12)
● SPDY 利用しようとすると怒られる
○ --with-http_spdy_module
○ listen 443 ssl spdy;
○ その他 spdy_* ディレクティブが残ってる
とエラー
Module ngx_http_v2_module
SPDY 対応ブラウザ
HTTP/2 対応ブラウザ
● SPDY や HTTP/2 を使わない通信を行うだけ
○ 基本的には HTTP/1.1 プロトコルになる
○ HTTP/2 がだめなら SPDY/3.1 で、とはな
らない(少なくとも nginx は)
○ しかし未対応というかバグで上手く動かな
いってことはあるかもね〜〜〜
未対応ブラウザってどうなるの?
● アクセス解析ツールでエラーが出たという
話も
○ 話に上がってたのは CGI ツール
○ クローリングとか必要なサイトではツー
ルでの動作確認も忘れずに
ブラウザだけじゃないかも
便利
ツール
Chrome 拡張:
HTTP/2 and SPDY indicator
● ソースコードからビルド; nginx-build
● 安全な HTTPS 通信設定
● HTTP/2 の利用と注意点
● 便利; HTTP/2 and SPDY indicator
今回のお話
終──────
ⓣⓜⓓ

More Related Content

What's hot

2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
Yasutaka Hamada
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
npsg
 
Trema での Open vSwitch
Trema での Open vSwitchTrema での Open vSwitch
Trema での Open vSwitchkazuyas
 
OpenvswitchでVPS
OpenvswitchでVPSOpenvswitchでVPS
OpenvswitchでVPS
Daisuke Nakajima
 
Serverspec at Testing Framework Meeting
Serverspec at Testing Framework MeetingServerspec at Testing Framework Meeting
Serverspec at Testing Framework Meeting
Gosuke Miyashita
 
serverspecでサーバ環境のテストを書いてみよう
serverspecでサーバ環境のテストを書いてみようserverspecでサーバ環境のテストを書いてみよう
serverspecでサーバ環境のテストを書いてみよう
Daisuke Ikeda
 
Docker+CoreOS+GCEで自動スケール分散レイトレ
Docker+CoreOS+GCEで自動スケール分散レイトレDocker+CoreOS+GCEで自動スケール分散レイトレ
Docker+CoreOS+GCEで自動スケール分散レイトレperyaudo
 
さくらインターネットにおけるServerspec導入事例(DevOps勉強会 #3 Serverspecの巻)
さくらインターネットにおけるServerspec導入事例(DevOps勉強会 #3 Serverspecの巻)さくらインターネットにおけるServerspec導入事例(DevOps勉強会 #3 Serverspecの巻)
さくらインターネットにおけるServerspec導入事例(DevOps勉強会 #3 Serverspecの巻)
さくらインターネット株式会社
 
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよ
npsg
 
Serverspecの活用tips紹介
Serverspecの活用tips紹介Serverspecの活用tips紹介
Serverspecの活用tips紹介
Daisuke Ikeda
 
Nuxt.js + microCMS + netlify
Nuxt.js + microCMS + netlifyNuxt.js + microCMS + netlify
Nuxt.js + microCMS + netlify
ogawatti
 
sysloadや監視などの話(仮)
sysloadや監視などの話(仮)sysloadや監視などの話(仮)
sysloadや監視などの話(仮)
Takanori Sejima
 
ヤギにサーバーを管理してもらう話
ヤギにサーバーを管理してもらう話ヤギにサーバーを管理してもらう話
ヤギにサーバーを管理してもらう話
Masaki Kobayashi
 
Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅-
Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅- Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅-
Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅-
Daisuke Ikeda
 
20140828 #ssmjp 社内チューニンガソンで優勝したはなし
20140828 #ssmjp 社内チューニンガソンで優勝したはなし20140828 #ssmjp 社内チューニンガソンで優勝したはなし
20140828 #ssmjp 社内チューニンガソンで優勝したはなし
Masahiro NAKAYAMA
 
Webサーバ勉強会4 nginx で php-fpm を動かしてみた
Webサーバ勉強会4 nginx で php-fpm を動かしてみたWebサーバ勉強会4 nginx で php-fpm を動かしてみた
Webサーバ勉強会4 nginx で php-fpm を動かしてみたdo_aki
 
「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)
「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)
「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)
さくらインターネット株式会社
 
Serverspecを使ってサーバ5000台のBaculaクライアントをテスト
Serverspecを使ってサーバ5000台のBaculaクライアントをテストServerspecを使ってサーバ5000台のBaculaクライアントをテスト
Serverspecを使ってサーバ5000台のBaculaクライアントをテスト
Ken Sawada
 
Deep Dive into Modules
Deep Dive into ModulesDeep Dive into Modules
Deep Dive into Modules
Hideki Saito
 
Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf)
Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf) Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf)
Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf)
VirtualTech Japan Inc.
 

What's hot (20)

2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
 
Trema での Open vSwitch
Trema での Open vSwitchTrema での Open vSwitch
Trema での Open vSwitch
 
OpenvswitchでVPS
OpenvswitchでVPSOpenvswitchでVPS
OpenvswitchでVPS
 
Serverspec at Testing Framework Meeting
Serverspec at Testing Framework MeetingServerspec at Testing Framework Meeting
Serverspec at Testing Framework Meeting
 
serverspecでサーバ環境のテストを書いてみよう
serverspecでサーバ環境のテストを書いてみようserverspecでサーバ環境のテストを書いてみよう
serverspecでサーバ環境のテストを書いてみよう
 
Docker+CoreOS+GCEで自動スケール分散レイトレ
Docker+CoreOS+GCEで自動スケール分散レイトレDocker+CoreOS+GCEで自動スケール分散レイトレ
Docker+CoreOS+GCEで自動スケール分散レイトレ
 
さくらインターネットにおけるServerspec導入事例(DevOps勉強会 #3 Serverspecの巻)
さくらインターネットにおけるServerspec導入事例(DevOps勉強会 #3 Serverspecの巻)さくらインターネットにおけるServerspec導入事例(DevOps勉強会 #3 Serverspecの巻)
さくらインターネットにおけるServerspec導入事例(DevOps勉強会 #3 Serverspecの巻)
 
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよ
 
Serverspecの活用tips紹介
Serverspecの活用tips紹介Serverspecの活用tips紹介
Serverspecの活用tips紹介
 
Nuxt.js + microCMS + netlify
Nuxt.js + microCMS + netlifyNuxt.js + microCMS + netlify
Nuxt.js + microCMS + netlify
 
sysloadや監視などの話(仮)
sysloadや監視などの話(仮)sysloadや監視などの話(仮)
sysloadや監視などの話(仮)
 
ヤギにサーバーを管理してもらう話
ヤギにサーバーを管理してもらう話ヤギにサーバーを管理してもらう話
ヤギにサーバーを管理してもらう話
 
Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅-
Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅- Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅-
Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅-
 
20140828 #ssmjp 社内チューニンガソンで優勝したはなし
20140828 #ssmjp 社内チューニンガソンで優勝したはなし20140828 #ssmjp 社内チューニンガソンで優勝したはなし
20140828 #ssmjp 社内チューニンガソンで優勝したはなし
 
Webサーバ勉強会4 nginx で php-fpm を動かしてみた
Webサーバ勉強会4 nginx で php-fpm を動かしてみたWebサーバ勉強会4 nginx で php-fpm を動かしてみた
Webサーバ勉強会4 nginx で php-fpm を動かしてみた
 
「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)
「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)
「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)
 
Serverspecを使ってサーバ5000台のBaculaクライアントをテスト
Serverspecを使ってサーバ5000台のBaculaクライアントをテストServerspecを使ってサーバ5000台のBaculaクライアントをテスト
Serverspecを使ってサーバ5000台のBaculaクライアントをテスト
 
Deep Dive into Modules
Deep Dive into ModulesDeep Dive into Modules
Deep Dive into Modules
 
Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf)
Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf) Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf)
Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf)
 

Viewers also liked

H2O 3.0
H2O 3.0H2O 3.0
H2O 3.0
池田 直哉
 
PHP7検証@IDCFクラウド
PHP7検証@IDCFクラウドPHP7検証@IDCFクラウド
PHP7検証@IDCFクラウド
Kouhei Ohi
 
歴史あるWebサービスに携わって2年半の間に起きた事やった事
歴史あるWebサービスに携わって2年半の間に起きた事やった事歴史あるWebサービスに携わって2年半の間に起きた事やった事
歴史あるWebサービスに携わって2年半の間に起きた事やった事
Masataka Kono
 
HTTP/2 でリバプロするだけでグラフツールを 高速化できた話
HTTP/2 でリバプロするだけでグラフツールを 高速化できた話HTTP/2 でリバプロするだけでグラフツールを 高速化できた話
HTTP/2 でリバプロするだけでグラフツールを 高速化できた話
Naotoshi Seo
 
H2O and php
H2O and phpH2O and php
H2O and php
Junichi Ishida
 
Rプログラミング01 はじめの一歩
Rプログラミング01 はじめの一歩Rプログラミング01 はじめの一歩
Rプログラミング01 はじめの一歩
wada, kazumi
 
Rデモ01_はじめの一歩2016
Rデモ01_はじめの一歩2016Rデモ01_はじめの一歩2016
Rデモ01_はじめの一歩2016
wada, kazumi
 
Rデモ02_入出力編2016
Rデモ02_入出力編2016Rデモ02_入出力編2016
Rデモ02_入出力編2016
wada, kazumi
 
ロジカル・シンキング & システム設計・プログラミングについて
ロジカル・シンキング & システム設計・プログラミングについてロジカル・シンキング & システム設計・プログラミングについて
ロジカル・シンキング & システム設計・プログラミングについて
Dai Saito
 
Rデモ03_データ分析編2016
Rデモ03_データ分析編2016Rデモ03_データ分析編2016
Rデモ03_データ分析編2016
wada, kazumi
 
Functional Way
Functional WayFunctional Way
Functional Way
Kent Ohashi
 
Rプログラミング02 データ入出力編
Rプログラミング02 データ入出力編Rプログラミング02 データ入出力編
Rプログラミング02 データ入出力編
wada, kazumi
 
MP in Haskell
MP in HaskellMP in Haskell
MP in Haskell
Kent Ohashi
 
Rプログラミング03 データ分析編
Rプログラミング03 データ分析編Rプログラミング03 データ分析編
Rプログラミング03 データ分析編
wada, kazumi
 
From Java To Clojure (English version)
From Java To Clojure (English version)From Java To Clojure (English version)
From Java To Clojure (English version)
Kent Ohashi
 
ネットワーク概論 サーバの構築理論
ネットワーク概論 サーバの構築理論ネットワーク概論 サーバの構築理論
ネットワーク概論 サーバの構築理論
Takahiro Komatsu
 
おいしいLisp
おいしいLispおいしいLisp
おいしいLisp
Kent Ohashi
 
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くしたNginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
toshi_pp
 
CDNによるInternet支配の現状とICNの可能性
CDNによるInternet支配の現状とICNの可能性CDNによるInternet支配の現状とICNの可能性
CDNによるInternet支配の現状とICNの可能性
J-Stream Inc.
 

Viewers also liked (19)

H2O 3.0
H2O 3.0H2O 3.0
H2O 3.0
 
PHP7検証@IDCFクラウド
PHP7検証@IDCFクラウドPHP7検証@IDCFクラウド
PHP7検証@IDCFクラウド
 
歴史あるWebサービスに携わって2年半の間に起きた事やった事
歴史あるWebサービスに携わって2年半の間に起きた事やった事歴史あるWebサービスに携わって2年半の間に起きた事やった事
歴史あるWebサービスに携わって2年半の間に起きた事やった事
 
HTTP/2 でリバプロするだけでグラフツールを 高速化できた話
HTTP/2 でリバプロするだけでグラフツールを 高速化できた話HTTP/2 でリバプロするだけでグラフツールを 高速化できた話
HTTP/2 でリバプロするだけでグラフツールを 高速化できた話
 
H2O and php
H2O and phpH2O and php
H2O and php
 
Rプログラミング01 はじめの一歩
Rプログラミング01 はじめの一歩Rプログラミング01 はじめの一歩
Rプログラミング01 はじめの一歩
 
Rデモ01_はじめの一歩2016
Rデモ01_はじめの一歩2016Rデモ01_はじめの一歩2016
Rデモ01_はじめの一歩2016
 
Rデモ02_入出力編2016
Rデモ02_入出力編2016Rデモ02_入出力編2016
Rデモ02_入出力編2016
 
ロジカル・シンキング & システム設計・プログラミングについて
ロジカル・シンキング & システム設計・プログラミングについてロジカル・シンキング & システム設計・プログラミングについて
ロジカル・シンキング & システム設計・プログラミングについて
 
Rデモ03_データ分析編2016
Rデモ03_データ分析編2016Rデモ03_データ分析編2016
Rデモ03_データ分析編2016
 
Functional Way
Functional WayFunctional Way
Functional Way
 
Rプログラミング02 データ入出力編
Rプログラミング02 データ入出力編Rプログラミング02 データ入出力編
Rプログラミング02 データ入出力編
 
MP in Haskell
MP in HaskellMP in Haskell
MP in Haskell
 
Rプログラミング03 データ分析編
Rプログラミング03 データ分析編Rプログラミング03 データ分析編
Rプログラミング03 データ分析編
 
From Java To Clojure (English version)
From Java To Clojure (English version)From Java To Clojure (English version)
From Java To Clojure (English version)
 
ネットワーク概論 サーバの構築理論
ネットワーク概論 サーバの構築理論ネットワーク概論 サーバの構築理論
ネットワーク概論 サーバの構築理論
 
おいしいLisp
おいしいLispおいしいLisp
おいしいLisp
 
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くしたNginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
 
CDNによるInternet支配の現状とICNの可能性
CDNによるInternet支配の現状とICNの可能性CDNによるInternet支配の現状とICNの可能性
CDNによるInternet支配の現状とICNの可能性
 

Similar to HTTP/2 in nginx(2016/3/11 社内勉強会)

最近の身の回りの電力事情
最近の身の回りの電力事情最近の身の回りの電力事情
最近の身の回りの電力事情
Kenichiro MATOHARA
 
etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2
etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2
etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2
Mitsutoshi Nakano
 
初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話
Masataka Tsukamoto
 
今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo Linuxについて今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo LinuxについてTakuto Matsuu
 
Ingress on GKE/GCE
Ingress on GKE/GCEIngress on GKE/GCE
Ingress on GKE/GCE
shouta yoshikai
 
Webサーバ、HTML
Webサーバ、HTMLWebサーバ、HTML
Webサーバ、HTML
Shuhei Iitsuka
 
OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾外道 父
 
HTTP2 時代の Web - web over http2
HTTP2 時代の Web - web over http2HTTP2 時代の Web - web over http2
HTTP2 時代の Web - web over http2
Jxck Jxck
 
2012/03/31 Apacheスタートスクリプト読書会発表資料
2012/03/31 Apacheスタートスクリプト読書会発表資料2012/03/31 Apacheスタートスクリプト読書会発表資料
2012/03/31 Apacheスタートスクリプト読書会発表資料Yasutaka Hamada
 
Bossan dentoo
Bossan dentooBossan dentoo
Bossan dentookubo39
 
Gentooでルータ作った話
Gentooでルータ作った話Gentooでルータ作った話
Gentooでルータ作った話Yuichi Nagayama
 
Osc10do linux nextstep
Osc10do linux nextstepOsc10do linux nextstep
Osc10do linux nextstepsmokey monkey
 
Ssl証明書を設定したらapacheが起動しない?
Ssl証明書を設定したらapacheが起動しない?Ssl証明書を設定したらapacheが起動しない?
Ssl証明書を設定したらapacheが起動しない?denet1999
 
Docker hands on nifty sakura jul19
Docker hands on nifty sakura jul19Docker hands on nifty sakura jul19
Docker hands on nifty sakura jul19
Masahito Zembutsu
 
XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用
Shinya Okano
 
MySQLやSSDとかの話 後編
MySQLやSSDとかの話 後編MySQLやSSDとかの話 後編
MySQLやSSDとかの話 後編
Takanori Sejima
 

Similar to HTTP/2 in nginx(2016/3/11 社内勉強会) (20)

最近の身の回りの電力事情
最近の身の回りの電力事情最近の身の回りの電力事情
最近の身の回りの電力事情
 
etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2
etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2
etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2
 
Osoljp201204
Osoljp201204Osoljp201204
Osoljp201204
 
初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話
 
20120525 mt websocket
20120525 mt websocket20120525 mt websocket
20120525 mt websocket
 
今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo Linuxについて今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo Linuxについて
 
Ingress on GKE/GCE
Ingress on GKE/GCEIngress on GKE/GCE
Ingress on GKE/GCE
 
Webサーバ、HTML
Webサーバ、HTMLWebサーバ、HTML
Webサーバ、HTML
 
OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾
 
らくちん Go言語
らくちん Go言語らくちん Go言語
らくちん Go言語
 
HTTP2 時代の Web - web over http2
HTTP2 時代の Web - web over http2HTTP2 時代の Web - web over http2
HTTP2 時代の Web - web over http2
 
2012/03/31 Apacheスタートスクリプト読書会発表資料
2012/03/31 Apacheスタートスクリプト読書会発表資料2012/03/31 Apacheスタートスクリプト読書会発表資料
2012/03/31 Apacheスタートスクリプト読書会発表資料
 
Bossan dentoo
Bossan dentooBossan dentoo
Bossan dentoo
 
Open VZ
Open VZOpen VZ
Open VZ
 
Gentooでルータ作った話
Gentooでルータ作った話Gentooでルータ作った話
Gentooでルータ作った話
 
Osc10do linux nextstep
Osc10do linux nextstepOsc10do linux nextstep
Osc10do linux nextstep
 
Ssl証明書を設定したらapacheが起動しない?
Ssl証明書を設定したらapacheが起動しない?Ssl証明書を設定したらapacheが起動しない?
Ssl証明書を設定したらapacheが起動しない?
 
Docker hands on nifty sakura jul19
Docker hands on nifty sakura jul19Docker hands on nifty sakura jul19
Docker hands on nifty sakura jul19
 
XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用
 
MySQLやSSDとかの話 後編
MySQLやSSDとかの話 後編MySQLやSSDとかの話 後編
MySQLやSSDとかの話 後編
 

More from Yoko TAMADA

エラーメッセージと仲良くなる(2018/6/29 e-Navigator勉強会#3)
エラーメッセージと仲良くなる(2018/6/29 e-Navigator勉強会#3)エラーメッセージと仲良くなる(2018/6/29 e-Navigator勉強会#3)
エラーメッセージと仲良くなる(2018/6/29 e-Navigator勉強会#3)
Yoko TAMADA
 
Archive: Android アプリ開発入門(2015/6/19 社内勉強会)
Archive: Android アプリ開発入門(2015/6/19 社内勉強会)Archive: Android アプリ開発入門(2015/6/19 社内勉強会)
Archive: Android アプリ開発入門(2015/6/19 社内勉強会)
Yoko TAMADA
 
My HTML Dark Past(2017/12/08 社内LT大会)
My HTML Dark Past(2017/12/08 社内LT大会)My HTML Dark Past(2017/12/08 社内LT大会)
My HTML Dark Past(2017/12/08 社内LT大会)
Yoko TAMADA
 
FAPI Security について聞いてきた話(2017/08/18 社内勉強会)
FAPI Security について聞いてきた話(2017/08/18 社内勉強会)FAPI Security について聞いてきた話(2017/08/18 社内勉強会)
FAPI Security について聞いてきた話(2017/08/18 社内勉強会)
Yoko TAMADA
 
Archive: Git 入門(2014/1/10 社内勉強会)
Archive: Git 入門(2014/1/10 社内勉強会)Archive: Git 入門(2014/1/10 社内勉強会)
Archive: Git 入門(2014/1/10 社内勉強会)
Yoko TAMADA
 
Middlemanで個人ページを作っている話(2014/8/23 社内勉強会LT)
Middlemanで個人ページを作っている話(2014/8/23 社内勉強会LT)Middlemanで個人ページを作っている話(2014/8/23 社内勉強会LT)
Middlemanで個人ページを作っている話(2014/8/23 社内勉強会LT)
Yoko TAMADA
 
Git&GitHubで共同作業〜入門編
Git&GitHubで共同作業〜入門編Git&GitHubで共同作業〜入門編
Git&GitHubで共同作業〜入門編
Yoko TAMADA
 

More from Yoko TAMADA (7)

エラーメッセージと仲良くなる(2018/6/29 e-Navigator勉強会#3)
エラーメッセージと仲良くなる(2018/6/29 e-Navigator勉強会#3)エラーメッセージと仲良くなる(2018/6/29 e-Navigator勉強会#3)
エラーメッセージと仲良くなる(2018/6/29 e-Navigator勉強会#3)
 
Archive: Android アプリ開発入門(2015/6/19 社内勉強会)
Archive: Android アプリ開発入門(2015/6/19 社内勉強会)Archive: Android アプリ開発入門(2015/6/19 社内勉強会)
Archive: Android アプリ開発入門(2015/6/19 社内勉強会)
 
My HTML Dark Past(2017/12/08 社内LT大会)
My HTML Dark Past(2017/12/08 社内LT大会)My HTML Dark Past(2017/12/08 社内LT大会)
My HTML Dark Past(2017/12/08 社内LT大会)
 
FAPI Security について聞いてきた話(2017/08/18 社内勉強会)
FAPI Security について聞いてきた話(2017/08/18 社内勉強会)FAPI Security について聞いてきた話(2017/08/18 社内勉強会)
FAPI Security について聞いてきた話(2017/08/18 社内勉強会)
 
Archive: Git 入門(2014/1/10 社内勉強会)
Archive: Git 入門(2014/1/10 社内勉強会)Archive: Git 入門(2014/1/10 社内勉強会)
Archive: Git 入門(2014/1/10 社内勉強会)
 
Middlemanで個人ページを作っている話(2014/8/23 社内勉強会LT)
Middlemanで個人ページを作っている話(2014/8/23 社内勉強会LT)Middlemanで個人ページを作っている話(2014/8/23 社内勉強会LT)
Middlemanで個人ページを作っている話(2014/8/23 社内勉強会LT)
 
Git&GitHubで共同作業〜入門編
Git&GitHubで共同作業〜入門編Git&GitHubで共同作業〜入門編
Git&GitHubで共同作業〜入門編
 

HTTP/2 in nginx(2016/3/11 社内勉強会)

  • 1. HTTP/2 in nginx Yoko TAMADA @tmd45 2016-03-11 feedforce Inc.
  • 2. 第一部:WWW 通信プロトコル基礎      〜 HTTP/1.1 を振り返る 第二部:高速化の歩み 〜 SPDY 実験 第三部:16 年ぶりの新鋭 HTTP/2 ! 今回のお話 … は、1時間くらいかかるし、あちこちで聞き まくって飽きたのでやめました。 「やっぱり動かしてみよう」と思い立って3日、 思った以上にさっくり動いたのでそんな話と某 所で聞いた注意点など
  • 3. そういえば ● HTTP/2 って必要なの? ○ もはや論じる余地なし ○ むずかしい話は端折りますけど、 HTTP/1 から HTTP/1.1 にしなかっ た人がいますか? ■ いるかもしれんけど(涙) ○ 対応時期を考える必要はあれども、 今後絶対に対応必須です!
  • 4. ● 用意したサーバ ○ ConoHa ■ GMO のオール SSD クラウド VPS ■ メモリ 1GB, 2 Core, SSD 50GB 底辺プラン ○ CentOS 7.2 ○ 作業用ユーザ作成して SSH ログイ ンしたぞ 前提
  • 5. ● ソースコードからビルド; nginx-build ● 安全な HTTPS 通信設定 ● HTTP/2 の利用 アジェンダ
  • 7. ● nginx-build を使おう ○ https://github.com/cubicdaiya/nginx-build ● go get するので go の準備から nginx をソースコードからビルドする
  • 8. go get nginx-build # cd /usr/local/src # wget https://storage.googleapis.com/golang/go1.6.linux- amd64.tar.gz # tar -C /usr/local/ -xzf go1.6.linux-amd64.tar.gz # echo "export PATH=$PATH:/usr/local/go/bin" >> /etc/profile $ mkdir ~/golang $ echo "export GOPATH=$HOME/golang" >> ~/.bashrc $ echo "export PATH=$PATH:$GOPATH/bin" >> ~/.bashrc $ go get -u github.com/cubicdaiya/nginx-build
  • 9. ● ビルドに必要なパッケージ ○ gcc ○ wget, git, mercurial ● HTTP モジュールで必要になるライブラリ ○ pcre-devel /* 正規表現 */ ○ zlib-devel /* gzip 圧縮 */ ○ openssl-devel /* SSL/TLS */ yum install
  • 10. # mkdir ~/nginx # vi ~/nginx/configure Custom configuration #!/bin/sh ./configure --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --with-http_gzip_static_module --with-http_ssl_module --with-http_v2_module
  • 11. # vi ~/nginx/module3rd.cfg 3rd-party module [headers-more-nginx-module] form=git url=https://github.com/openresty/headers-more-nginx-module.git rev=v0.29
  • 12. $ mkdir work $ nginx-build -d work [-v 1.9.12] -c nginx/configure -m nginx/module3rd.cfg nginx-build: 0.7.1 Compiler: gc go1.6 2016/03/09 00:39:09 Download nginx-1.9.12..... ... 2016/03/09 00:39:29 Enter the following command for install nginx. $ cd work/nginx/1.9.12/nginx-1.9.12 $ sudo make install build & make install
  • 13. $ nginx -V nginx version: nginx/1.9.12 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC) built with OpenSSL 1.0.1e-fips 11 Feb 2013 TLS SNI support enabled configure arguments: --sbin-path=/usr/sbin/nginx --conf- path=/etc/nginx/nginx.conf --with-http_gzip_static_module -- with-http_ssl_module --with-http_v2_module --add-module=.. /headers-more-nginx-module nginx の構成確認
  • 14. ● 問題点 ○ CentOS 7 の systemd でサービス管理す るためのファイル nginx.service が生成さ れない ○ systemctl enable nginx.service できない ○ 自分で作る(今回はまだやってない) $ sudo nginx $ sudo nginx -s stop nginx 起動と停止
  • 16. 最低限の HTTPS 通信設定 server { listen 443 default_server ssl; server_name example.com www.example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ... } /etc/nginx/conf.d/example.com.conf
  • 17. 余談; SSL 証明書 ~Let's Encrypt! ● 使ってみた → 超簡単 $ git clone https://github.com/letsencrypt/letsencrypt $ cd letsencrypt/ $ ./letsencrypt-auto --help ※ DNS 設定済み, nginx 停止中 $ ./letsencrypt-auto certonly -a standalone -d example.com -d www.example.com ※ TUI が起動 → メアド入力&規約同意 IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will expire on 2016-06-08. To obtain a new version of the certificate in the future, simply run Let's Encrypt again.
  • 18. ● Mozilla SSL Configuration Generator ○ https://mozilla.github.io/server-side-tls/ssl- config-generator/ 安全な HTTPS 通信設定
  • 19. 安全な HTTPS 通信設定 server { listen 443 default_server ssl; server_name example.net www.example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_session_timeout 1d; ssl_session_cache shared:SSL:5m; ssl_session_tickets off; ssl_dhparam /etc/nginx/ssl/dhparam.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA- CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA- AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256'; ssl_prefer_server_ciphers on; add_header Strict-Transport-Security max-age=15768000; ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /etc/letsencrypt/live/example.com/fullchain.pem; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s; /etc/nginx/conf.d/example.com.conf
  • 20. ● 各ディレクティブの解説 ○ 『nginx 実践入門』オススメ ■ 暗号化スイート ■ HSTS ■ 安全性と互換性のバランスについ て(ただし書籍執筆時点) 安全な HTTPS 通信設定
  • 22. HTTP/2 の有効化 server { listen 443 default_server ssl http2; server_name example.com www.example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ... } /etc/nginx/conf.d/example.com.conf これだけ!
  • 23. ● nginx 1.9.5 〜(now 1.9.12) ● SPDY 利用しようとすると怒られる ○ --with-http_spdy_module ○ listen 443 ssl spdy; ○ その他 spdy_* ディレクティブが残ってる とエラー Module ngx_http_v2_module
  • 26. ● SPDY や HTTP/2 を使わない通信を行うだけ ○ 基本的には HTTP/1.1 プロトコルになる ○ HTTP/2 がだめなら SPDY/3.1 で、とはな らない(少なくとも nginx は) ○ しかし未対応というかバグで上手く動かな いってことはあるかもね〜〜〜 未対応ブラウザってどうなるの?
  • 27. ● アクセス解析ツールでエラーが出たという 話も ○ 話に上がってたのは CGI ツール ○ クローリングとか必要なサイトではツー ルでの動作確認も忘れずに ブラウザだけじゃないかも
  • 29. Chrome 拡張: HTTP/2 and SPDY indicator
  • 30. ● ソースコードからビルド; nginx-build ● 安全な HTTPS 通信設定 ● HTTP/2 の利用と注意点 ● 便利; HTTP/2 and SPDY indicator 今回のお話 終────── ⓣⓜⓓ