SlideShare a Scribd company logo
Nginx&バージョンアップ動向
TAKAMURA'Narimichi'(@nari_ex)
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 1
このスライドの内容
• バージョンアップ動向(ほとんどこれ)
• stable(ブランチと(mainline(ブランチの話(おまけ)
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 2
バージョンアップ動向
• 一年分追いかけました(2014/01∼2014/12)
• Change,.Feature,.Security.のみに注目(Bugfixは無視)
• 多すぎたので重要っぽいものを厳選
• ngx_http_mp4_module.は更新頻度が高いけど今回は取
り上げてないです
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 3
Nginx&1.5.9(2014.01.22)
• Feature
• limit_rate,が,SPDY,に対応
• コネクションごとの接続帯域をしぼる
• ssl_session_(ckets
• SSLセッションチケットに対応(RFC,5077)
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 4
SSL#が抱える問題
• SSL$が抱える問題点
• 初回のハンドシェイク時の処理が重い
→$二回目以降は省略したい
→"SSLセッションチケットの出番
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 5
SSL#セッションキャッシュ
1. 初回接続
2. セッションIDをクライアントとサーバの両方に保存
3. 2回目以降はセッションIDを照合することで接続可能
→ハンドシェイクを省略
問題点
!"サーバ側でハンドシェイクのデータを共有する必要あり
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 6
SSL#セッションチケット
1. 初回接続
2. サーバから暗号化されたセッションチケットをクライアントへ
渡す。この内容は暗号化されているためサーバしか解読できな
い
3. 2回目以降は(クライアントから送られる)セッションチケッ
トを確認することで接続可能
※!なお、セッションチケットを暗号化する ファイルは予め共有
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 7
Nginx&1.5.10(2014-02-04)
• Feature
• the)ngx_h.p_spdy_module)が)SPDY)3.1)をサポート
• 3.0)と比較すると)セッション単位のフロー制御ができるよ
うになった
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 8
Nginx&1.5.11(2014-03-04)
• Security
• ngx_h/p_spdy_module6モジュールの6SPDY6の実装における任
意のコードを実行される脆弱性に対応
CVE$2014$0088
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 9
Nginx&1.5.12(2014-03-18)
• Security
• SPDY-のバッファオーバーフロー問題の対策
• Feature
• Proxy&Protocol&に対応
• これに伴い関連する変数が新しく実装された
CVE$2014$0133
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 10
L4#ロードバランサの問題点
• 接続元IPアドレスがわからない
• →%L7の場合はHTTPヘッダに%X+Forwarded+For%フィールドを
追加すればよい
• L4%ではHTTPヘッダをいじれない
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 11
Proxy&Protocol
• クライアントの接続情報をTCPヘッダに付加する
→&振り分け先のサーバが&Proxy&Protocol&に対応していれば接続
元の情報が分かる
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 12
Proxy&Protocol&の設定例
listen 80 proxy_protocol;
...
set_real_ip_from 172.31.0.0/20;
real_ip_header proxy_protocol;
※!AWSのELBは2013年8月に対応
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 13
Nginx&1.5.13(2014.04.08)
• Change
• variables_hash_max_size(が(512(→(1024
• 変数を保持するハッシュテーブルの最大エントリのサイズ
• types_hash_bucket_size(が(32|64|128(プロセッサ依
存)→(64
• types(ハッシュテーブルを保持するエントリのサイズ
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 14
Nginx&1.7.0&(2014-04-24)
• Feature
• access_log)で)if)が利用可能に
• バックエンドのサーバを公開 認証で照合可能に
• バックエンドのサーバの照合時にSNIを利用可能に
• proxy_ssl_server_name on(
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 15
access_log)で)if)を使う例
静的ファイルへのアクセスログを省く設定
map $uri $loggable {
~.*.(gif|jpg|png|ico|js|css)$ 0;
default 1;
}
access_log /var/log/nginx/access.log ltsv if=$loggable;
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 16
proxy_ssl_verify-の設定例
proxy_ssl_verify on;
proxy_ssl_verify_depth 3;
proxy_ssl_trusted_certificate /etc/ssl/certs/hogehoge.pem;
proxy_pass https://s3-ap-northeast-1.amazonaws.com/XXX/
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 17
Nginx&1.7.1&(2014-05-27)
• Feature
• ログを!syslog!へ投げられるようになった
• 商用版(NGINX,Plus)では実装済みだった
• upstream_cookie_...,変数
• upstream!サーバによって送信されたクッキーを参照可能
に
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 18
Nginx&1.7.2&(2014-06-17)
• Feature
• upstream)ブロックで)hash)が利用可能に
• free)な共有メモリブロックをデフラグするようになった
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 19
今までの!upstream!振り分けの問題点
• デフォルトでは"ip_hash"のみ
• アクセス元IPアドレスベース
• 柔軟な振り分けポリシーを設定するにはサードパーティモジュ
ールが必要
→"hash$ディレクティブの実装により任意の変数を指定可能に!
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 20
upstream)ブロックで)hash)を用いる例
url$ベースで振り分ける
upstream backend {
hash $request_uri;
server 192.168.0.1:8080;
server 192.168.0.2:8080;
}
location / {
proxy_pass http://backend;
}
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 21
Nginx&1.7.3&(2014.07.08)
• Feature
• SSL証明書のパスワードをファイルから読み取り可能に
• HTTP-ETag-に関する機能追加
• >-weak-en4ty-tags-are-now-preserved-on-response-
modifica4ons,-and-strong-ones-are-changed-to-weak.
• >-cache-revalida4on-now-uses-IfENoneEMatch-header-if-
possible.
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 22
Nginx&1.7.4&(2014-08-05)
• Security
• POODLE/脆弱性対応
• Feature
• 16進数の大文字を含んだURIのエスケープが可能に
• BoringSSL、LibreSSL+を用いてビルド可能に
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 23
新しい!SSL!ライブラリの話
• OpenSSL(の(Heartbleed(脆弱性を受けて、独自にフォークをし
て開発されはじめた
• Boringssl:(Google(がフォーク
• Libressl:(OpenBSDの開発者がフォーク
Nginx&2.7.4&で上記ライブラリを利用してビルド可能になった
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 24
Nginx&1.7.5&(2014.09.16)&その1
• Security
• Virtual-Host-Confusion-攻撃を実行される脆弱性に対応
• Change
• stub_status-が引数なしになった
• stub_status on;-ではなく-stub_status;
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 25
Nginx&1.7.5&(2014.09.16)&その2
• Feature
• (proxy|fastcgi|memcached|scgi|uwsgi)_next_upstream_tries:デ
ィレクティブが利用可能に
• (proxy|fastcgi|memcached|scgi|uwsgi)_next_upstream_;meout:
ディレクティブが利用可能に
→"あとで検証する"☆
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 26
Nginx&1.7.5&(2014.09.16)&その3
• Feature
• add_header'ディレクティブで'always'パラメタが利用可能に
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 27
add_header'に'always'が使えるとなにがいいのか
• 通常(always'を付与しない)の場合、特定のレスポンスコード
の場合にのみヘッダの追加が有効になる。
• →'200,'201,'204,'206,'301,'302,'303,'304,'307
→"always"パラメタを付与することでステータスコードに関係なく
ヘッダの追加が可能
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 28
Nginx&1.7.6&(2014.09.30)
• Change
• "limit_zone"0ディレクティブの廃止
• 保持する共有メモリ領域のパラメタ指定
• limit_conn_zone,,limit_req_zone,にて複数の,key,を指定可能
に
• 今までは1つしか指定できなかった
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 29
limitconnzone,*limitreqzone
リクエスト数やコネクション数を制限する機能
複数条件を指定して接続制限をかけられるようになった
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
server {
...
limit_conn perip 10;
limit_conn perserver 100;
}
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 30
Nginx&1.7.7&(2014-10-28)その1
• Change
• Vary+ヘッダがある場合も、バックエンドのレスポンスをキャ
ッシュするようになった
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 31
Nginx&1.7.7&(2014-10-28)その2
• Feature
• (proxy|fastcgi|scgi|uwsgi)_force_ranges
• バックエンドのサーバからのキャッシュおよびキャッシュ
されていない応答の両方において、byte8rangeのサポート
を有効にする
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 32
Nginx&1.7.7&(2014-10-28)その3
• (proxy|fastcgi|scgi|uwsgi)_limit_rate
• バックエンドのサーバから読み込む応答の速度を制限する
• (proxy|fastcgi|scgi|uwsgi)_ignore_headers:が:Vary:フィールドに
対応
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 33
Nginx&1.7.8&(2014.12.02)&その1
• Change
• log_format*ディレクティブが*h,p*ブロックでのみ利用可能に
• (proxy|fastcgi|scgi|uwsgi)_cache_lock_age:ディレクティブ
• ロックが解放され、(おそらく別の上位サーバへ試行し)
キャッシュを再作成しようとする
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 34
Nginx&1.7.8&(2014.12.02)&その2
• Feature
• ssl_cer,ficate,/ssl_cer,ficate_key,/ssl_password_file/が/proxy,/
uwsgi/に対応
• tcp_nodelay/が/SPDY/に対応
• Keepalive/時に/TCP_NODELAY/フラグを立てるかどうか
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 35
Nginx&1.7.8&(2014.12.02)&その3(時間あれば)
• Change
• proxy_cache_/meout3後は、キャッシュが作成されなくなっ
た
• 再作成したいなら*cachelock_age3を使えという意図っぽい
• proxy_cache_min_uses3利用時に生じるケース3
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 36
Nginx&1.7.9&(2014.12.23)&その1
• Feature
• (proxy|fastcgi|scgi|uwsgi)_cache7変数
• expires7変数
• autoindex_format.ディレクティブ
• html7だけではなく、xml7や7json7を選べるようになった
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 37
autoindex*とは
• みなさんご存知のこれです(下記は"html"形式)
• この情報が"json"や"xml"で返せるようになった
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 38
stable'ブランチと'mainline'ブランチ
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 39
mainline'が'1.6'にならなかった件
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 40
ブランチの遷移図
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 41
答え
• stable(のバージョンが(1.4(から(1.6(になった
• mainline(1.5)がフォークされたもの
• 1.4(はすでに(EOL(
• このタイミングで(mailine(は(1.7(となった
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 42
どっちがいいんだろう...
作者曰く、大概の場合は!mainline!を使うべし
In#general,#you#should#deploy#the#NGINX#mainline#branch#at#all#
9mes.#
→"なんでか調べた
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 43
stable'と'mainline'の違い
• stable(は新機能が入らない
• stable(はバグが少ないという意味ではない
• mainline(はバグ修正がすべて行われる
• stable(は深刻なバグに関する修正のみが行われる
参考:"NGINX"1.6"and"1.7"released
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 44
mainline'ではなく'stable'を用いたほうがよい
ケース
以下の場合は!stable!を用いたほうがよい
• サードパーティモジュールとの互換性が気になる場合
• 新機能のリリースで紛れ込んだバグを回避したい
参考:"NGINX"1.6"and"1.7"released
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 45
感想
• Apache(にはあって(Nginx(にない機能が少なくなってきた
• 便利な変数が増えてるので(lua(を用いていろいろ応用できそう
• パラメタ調整が勝手に行われたりするので、バージョンアップ
だけでやや性能が上がりそう
• 副作用に要注意
2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 46

More Related Content

PDF
Nginx バージョンアップ動向(2015/07〜2015/12)
PDF
Nginx バージョンアップ動向(2015/01〜2015/06)
PDF
Dovecot & Postfix バージョンアップ動向 201506-201511
PDF
nginxの紹介
PPTX
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
PDF
nginx + lua + ObjectStorage ファイルアップロード/ダウンロードの高速化
PDF
Webサーバ勉強会#4
PPTX
OpenShift from Easy way to Hard ? Way
Nginx バージョンアップ動向(2015/07〜2015/12)
Nginx バージョンアップ動向(2015/01〜2015/06)
Dovecot & Postfix バージョンアップ動向 201506-201511
nginxの紹介
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
nginx + lua + ObjectStorage ファイルアップロード/ダウンロードの高速化
Webサーバ勉強会#4
OpenShift from Easy way to Hard ? Way

What's hot (20)

PDF
Using ngx_lua / lua-nginx-module in pixiv
PDF
NGINX Back to Basic 2 Part 2 (Japanese Webinar)
PPTX
st2-docker ことはじめ
PDF
OpenStack Atlanta Summit Report: Neutron, Nova and design summit sessions
PDF
「これからはじめるNGINX技術解説~基本編」セミナー (NGINX Back to Basic in JP)
PDF
NGINX製品の最新機能アップデート情報
PPTX
Jenkins 2.0 (日本語)
PDF
OpenContrail Users Event at OpenStack Summit Paris 行ってきました
PDF
APIMeetup 20170329_ichimura
PPTX
Jenkins User Conference 東京 2015
PPTX
NGINX + Ansible Automation Webinar (日本語版)
PDF
20140404 vyatta users Group / REST API解説
PPTX
Live配信のワークフロー takusuta tech conf #1
PDF
NGINX Back to Basics: Ingress Controller (Japanese Webinar)
PDF
Cumulus Linux 導入事例 -ネットワークをDevOpsに統合した、エンジニアが幸せになるインフラ運用手法のご紹介-
PPTX
OCP Serverを用いた OpenStack Containerの検証
PDF
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
PPTX
StackStorm Workflowの設計
PPTX
OpenStack Project Update Neutron Update
PDF
NGINX東京ハッピーアワー「DevOpsプラクティスによるクラウドでのKubernetesの利用」
Using ngx_lua / lua-nginx-module in pixiv
NGINX Back to Basic 2 Part 2 (Japanese Webinar)
st2-docker ことはじめ
OpenStack Atlanta Summit Report: Neutron, Nova and design summit sessions
「これからはじめるNGINX技術解説~基本編」セミナー (NGINX Back to Basic in JP)
NGINX製品の最新機能アップデート情報
Jenkins 2.0 (日本語)
OpenContrail Users Event at OpenStack Summit Paris 行ってきました
APIMeetup 20170329_ichimura
Jenkins User Conference 東京 2015
NGINX + Ansible Automation Webinar (日本語版)
20140404 vyatta users Group / REST API解説
Live配信のワークフロー takusuta tech conf #1
NGINX Back to Basics: Ingress Controller (Japanese Webinar)
Cumulus Linux 導入事例 -ネットワークをDevOpsに統合した、エンジニアが幸せになるインフラ運用手法のご紹介-
OCP Serverを用いた OpenStack Containerの検証
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
StackStorm Workflowの設計
OpenStack Project Update Neutron Update
NGINX東京ハッピーアワー「DevOpsプラクティスによるクラウドでのKubernetesの利用」
Ad

Similar to Nginx バージョンアップ動向(2014/01〜2014/12) (20)

PDF
Dovecot & Postfix バージョンアップ動向 201401-201505
PDF
SpringOne Platform 2018 全体報告
PPTX
SpringOne Platform 2018 全体報告
PDF
Play ja 3_update
PDF
Chainer Contribution Guide
PPTX
2016-ShowNet-テスター
PDF
持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜
PDF
HBase Meetup Tokyo Summer 2015 #hbasejp
PDF
SkyWayを使いこなすために How to use SkyWay -SkyWay UG Kansai #1 スペシャルバージョン-
PPTX
OSSで作るOpenStack監視システム
PDF
最新版Hadoopクラスタを運用して得られたもの
PDF
OpenStack Vancouver Summit Report presented at nttgroup meeting in Japanese
PPTX
誰にでもできるパフォーマンスチューニング
PPTX
こだわりのkintone
PDF
チケット管理システム大決戦第二弾
PPT
Yahoo!Japan北米DCでOCPのツボをみせてもらってきました - OpenStack最新情報セミナー 2016年5月
PPTX
Multibranch Pipeline with Docker 入門編
PDF
YJTC18 A-1 大規模サーバの戦略
PDF
YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)
PDF
OpenStack Ops Mid-Cycle Meetup & Project Team Gathering出張報告
Dovecot & Postfix バージョンアップ動向 201401-201505
SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告
Play ja 3_update
Chainer Contribution Guide
2016-ShowNet-テスター
持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜
HBase Meetup Tokyo Summer 2015 #hbasejp
SkyWayを使いこなすために How to use SkyWay -SkyWay UG Kansai #1 スペシャルバージョン-
OSSで作るOpenStack監視システム
最新版Hadoopクラスタを運用して得られたもの
OpenStack Vancouver Summit Report presented at nttgroup meeting in Japanese
誰にでもできるパフォーマンスチューニング
こだわりのkintone
チケット管理システム大決戦第二弾
Yahoo!Japan北米DCでOCPのツボをみせてもらってきました - OpenStack最新情報セミナー 2016年5月
Multibranch Pipeline with Docker 入門編
YJTC18 A-1 大規模サーバの戦略
YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)
OpenStack Ops Mid-Cycle Meetup & Project Team Gathering出張報告
Ad

More from Narimichi Takamura (7)

PPTX
ぼくとおこめとJSON
PDF
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 5 章
PDF
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 1 章
PDF
【続編】その ionice、ほんとに効いてますか?
PDF
その ionice、ほんとに効いてますか?
PDF
ぼくとおこめ
PDF
( (0) / (0)) ☆祝☆ (nari_ex) LT at Cloud Server Festa 2013 Autumn「サバフェス!」
ぼくとおこめとJSON
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 5 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 1 章
【続編】その ionice、ほんとに効いてますか?
その ionice、ほんとに効いてますか?
ぼくとおこめ
( (0) / (0)) ☆祝☆ (nari_ex) LT at Cloud Server Festa 2013 Autumn「サバフェス!」

Nginx バージョンアップ動向(2014/01〜2014/12)