Your SlideShare is downloading. ×
  • Like
Nginx バージョンアップ動向(2014/01〜2014/12)
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

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

  • 44 views
Published

社内勉強会の資料

社内勉強会の資料

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
44
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
0
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Nginx&バージョンアップ動向 TAKAMURA'Narimichi'(@nari_ex) 2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 1
  • 2. このスライドの内容 • バージョンアップ動向(ほとんどこれ) • stable(ブランチと(mainline(ブランチの話(おまけ) 2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 2
  • 3. バージョンアップ動向 • 一年分追いかけました(2014/01∼2014/12) • Change,.Feature,.Security.のみに注目(Bugfixは無視) • 多すぎたので重要っぽいものを厳選 • ngx_http_mp4_module.は更新頻度が高いけど今回は取 り上げてないです 2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 3
  • 4. Nginx&1.5.9(2014.01.22) • Feature • limit_rate,が,SPDY,に対応 • コネクションごとの接続帯域をしぼる • ssl_session_(ckets • SSLセッションチケットに対応(RFC,5077) 2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 4
  • 5. SSL#が抱える問題 • SSL$が抱える問題点 • 初回のハンドシェイク時の処理が重い →$二回目以降は省略したい →"SSLセッションチケットの出番 2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 5
  • 6. SSL#セッションキャッシュ 1. 初回接続 2. セッションIDをクライアントとサーバの両方に保存 3. 2回目以降はセッションIDを照合することで接続可能 →ハンドシェイクを省略 問題点 !"サーバ側でハンドシェイクのデータを共有する必要あり 2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 6
  • 7. SSL#セッションチケット 1. 初回接続 2. サーバから暗号化されたセッションチケットをクライアントへ 渡す。この内容は暗号化されているためサーバしか解読できな い 3. 2回目以降は(クライアントから送られる)セッションチケッ トを確認することで接続可能 ※!なお、セッションチケットを暗号化する ファイルは予め共有 2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 7
  • 8. 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
  • 9. Nginx&1.5.11(2014-03-04) • Security • ngx_h/p_spdy_module6モジュールの6SPDY6の実装における任 意のコードを実行される脆弱性に対応 CVE$2014$0088 2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 9
  • 10. Nginx&1.5.12(2014-03-18) • Security • SPDY-のバッファオーバーフロー問題の対策 • Feature • Proxy&Protocol&に対応 • これに伴い関連する変数が新しく実装された CVE$2014$0133 2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 10
  • 11. L4#ロードバランサの問題点 • 接続元IPアドレスがわからない • →%L7の場合はHTTPヘッダに%X+Forwarded+For%フィールドを 追加すればよい • L4%ではHTTPヘッダをいじれない 2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 11
  • 12. Proxy&Protocol • クライアントの接続情報をTCPヘッダに付加する →&振り分け先のサーバが&Proxy&Protocol&に対応していれば接続 元の情報が分かる 2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 12
  • 13. 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
  • 14. 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
  • 15. Nginx&1.7.0&(2014-04-24) • Feature • access_log)で)if)が利用可能に • バックエンドのサーバを公開 認証で照合可能に • バックエンドのサーバの照合時にSNIを利用可能に • proxy_ssl_server_name on( 2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 15
  • 16. 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
  • 17. 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
  • 18. Nginx&1.7.1&(2014-05-27) • Feature • ログを!syslog!へ投げられるようになった • 商用版(NGINX,Plus)では実装済みだった • upstream_cookie_...,変数 • upstream!サーバによって送信されたクッキーを参照可能 に 2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 18
  • 19. Nginx&1.7.2&(2014-06-17) • Feature • upstream)ブロックで)hash)が利用可能に • free)な共有メモリブロックをデフラグするようになった 2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 19
  • 20. 今までの!upstream!振り分けの問題点 • デフォルトでは"ip_hash"のみ • アクセス元IPアドレスベース • 柔軟な振り分けポリシーを設定するにはサードパーティモジュ ールが必要 →"hash$ディレクティブの実装により任意の変数を指定可能に! 2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 20
  • 21. 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
  • 22. 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
  • 23. Nginx&1.7.4&(2014-08-05) • Security • POODLE/脆弱性対応 • Feature • 16進数の大文字を含んだURIのエスケープが可能に • BoringSSL、LibreSSL+を用いてビルド可能に 2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 23
  • 24. 新しい!SSL!ライブラリの話 • OpenSSL(の(Heartbleed(脆弱性を受けて、独自にフォークをし て開発されはじめた • Boringssl:(Google(がフォーク • Libressl:(OpenBSDの開発者がフォーク Nginx&2.7.4&で上記ライブラリを利用してビルド可能になった 2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 24
  • 25. 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
  • 26. 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
  • 27. Nginx&1.7.5&(2014.09.16)&その3 • Feature • add_header'ディレクティブで'always'パラメタが利用可能に 2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 27
  • 28. add_header'に'always'が使えるとなにがいいのか • 通常(always'を付与しない)の場合、特定のレスポンスコード の場合にのみヘッダの追加が有効になる。 • →'200,'201,'204,'206,'301,'302,'303,'304,'307 →"always"パラメタを付与することでステータスコードに関係なく ヘッダの追加が可能 2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 28
  • 29. 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
  • 30. 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
  • 31. Nginx&1.7.7&(2014-10-28)その1 • Change • Vary+ヘッダがある場合も、バックエンドのレスポンスをキャ ッシュするようになった 2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 31
  • 32. Nginx&1.7.7&(2014-10-28)その2 • Feature • (proxy|fastcgi|scgi|uwsgi)_force_ranges • バックエンドのサーバからのキャッシュおよびキャッシュ されていない応答の両方において、byte8rangeのサポート を有効にする 2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 32
  • 33. 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
  • 34. 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
  • 35. 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
  • 36. 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
  • 37. 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
  • 38. autoindex*とは • みなさんご存知のこれです(下記は"html"形式) • この情報が"json"や"xml"で返せるようになった 2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 38
  • 39. stable'ブランチと'mainline'ブランチ 2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 39
  • 40. mainline'が'1.6'にならなかった件 2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 40
  • 41. ブランチの遷移図 2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 41
  • 42. 答え • stable(のバージョンが(1.4(から(1.6(になった • mainline(1.5)がフォークされたもの • 1.4(はすでに(EOL( • このタイミングで(mailine(は(1.7(となった 2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 42
  • 43. どっちがいいんだろう... 作者曰く、大概の場合は!mainline!を使うべし In#general,#you#should#deploy#the#NGINX#mainline#branch#at#all# 9mes.# →"なんでか調べた 2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 43
  • 44. stable'と'mainline'の違い • stable(は新機能が入らない • stable(はバグが少ないという意味ではない • mainline(はバグ修正がすべて行われる • stable(は深刻なバグに関する修正のみが行われる 参考:"NGINX"1.6"and"1.7"released 2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 44
  • 45. mainline'ではなく'stable'を用いたほうがよい ケース 以下の場合は!stable!を用いたほうがよい • サードパーティモジュールとの互換性が気になる場合 • 新機能のリリースで紛れ込んだバグを回避したい 参考:"NGINX"1.6"and"1.7"released 2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 45
  • 46. 感想 • Apache(にはあって(Nginx(にない機能が少なくなってきた • 便利な変数が増えてるので(lua(を用いていろいろ応用できそう • パラメタ調整が勝手に行われたりするので、バージョンアップ だけでやや性能が上がりそう • 副作用に要注意 2015/01/19'社内プロダクト勉強会'('TAKAMURA'Narimichi(topotal) 46