25
Nginx バージョンアップ動向 2015/01 2015/06 TAKAMURA Narimichi@nari_ex2015/06/22 社内プロダクト勉強会 ( TAKAMURA Narimichi 1

Nginx-201501-201506

Embed Size (px)

Citation preview

Page 1: Nginx-201501-201506

Nginx&バージョンアップ動向2015/01&~&2015/06

TAKAMURA'Narimichi(@nari_ex)

2015/06/22'社内プロダクト勉強会'('TAKAMURA'Narimichi 1

Page 2: Nginx-201501-201506

バージョンアップ動向• 前回発表時点からの更新分を追いかけました

• 2015/01(v1.7.10)~*2015/06(v1.9.2)

• Change,*Feature,*Bugfix*に注目

• (proxy|fastcgi|scgi)_hoge*みたいなパラメータは*proxy*のみ記載

2015/06/22'社内プロダクト勉強会'('TAKAMURA'Narimichi 2

Page 3: Nginx-201501-201506

Nginx&1.7.10(2014-02-10)&その1

• Feature

• use_temp_path(が(proxy_cache_path(などで利用可能

• キャッシュ作成時の一時ファイルのパス

• on(または(off(を指定

• proxy_temp_path(などで具体的なパスを指定する

2015/06/22'社内プロダクト勉強会'('TAKAMURA'Narimichi 3

Page 4: Nginx-201501-201506

use_temp_path!の設定例proxy_cache_path /data/nginx/cache use_temp_path=on;proxy_temp_path /data/nginx/tmp

• キャッシュ作成は一時ファイルに書き込んだあと、そのファイルをキャッシュ保存先のパスへ移動することで行われる

• 移動元と移動先のファイルシステムが異なる場合、リネームではなくコピー処理になるので注意

2015/06/22'社内プロダクト勉強会'('TAKAMURA'Narimichi 4

Page 5: Nginx-201501-201506

Nginx&1.7.10(2014-02-10)&その2

• Feature

• upstream_header_time(変数

• upstream(サーバから応答ヘッダを受け取るまでの時間

• lua(や(mruby(拡張を用いて、n(秒以上応答ヘッダを返さない(upstream(サーバを切り離す処理とかが実現できそう

2015/06/22'社内プロダクト勉強会'('TAKAMURA'Narimichi 5

Page 6: Nginx-201501-201506

Nginx&1.7.11(2015-03-24)&その1

• Change

• aio sendfile;(が非推奨(deprecated)

• aioとsendfileディレクティブを両方使った場合、非同期ファイル(I/O(時のsendfile()呼び出しの際に読みを行う

2015/06/22'社内プロダクト勉強会'('TAKAMURA'Narimichi 6

Page 7: Nginx-201501-201506

Nginx&1.7.11(2015-03-24)&その2

• Feature

• スレッドプールをサポート(experimental)

• メールプロキシがクライアント.SSL.をサポート

• proxy_request_buffering!追加

• リクエストボディのバッファリングのON・OFF切り替え

2015/06/22'社内プロダクト勉強会'('TAKAMURA'Narimichi 7

Page 8: Nginx-201501-201506

proxy_request_buffering!の設定例client_max_body_size 50m;server { listen 80; location /upload { proxy_request_buffering off; ... }}

※!設定次第では強制的にONになることがあるので注意!1

1"nginxのリクエストボディのバッファリングに関する問題とその改善策

2015/06/22'社内プロダクト勉強会'('TAKAMURA'Narimichi 8

Page 9: Nginx-201501-201506

Nginx&1.7.11(2015-03-24)&その3

• Feature

• リクエストボディフィルターAPI(experimental)

• Bugfix

• LibreSSL7を利用した場合に7SSLv37が利用できない問題を修正

2015/06/22'社内プロダクト勉強会'('TAKAMURA'Narimichi 9

Page 10: Nginx-201501-201506

Nginx&1.7.12(2015-04-07)&その1

• Feature

• tcp_nodelay(がバックエンドとのSSLコネクション時にも動作する

• スレッドプールがキャッシュ読み込み時に利用される※(スレッドプールは9倍速くなるらしい2

2"Thread"Pools"in"NGINX"Boost"Performance"9x!

2015/06/22'社内プロダクト勉強会'('TAKAMURA'Narimichi 10

Page 11: Nginx-201501-201506

Nginx&1.7.12(2015-04-07)&その2

• Bugfix

• Linux*でスレッドプール利用時にSegmenta0on*Faultする問題を修正

• ngx_http_spdy_module*のバグ修正

2015/06/22'社内プロダクト勉強会'('TAKAMURA'Narimichi 11

Page 12: Nginx-201501-201506

Nginx&1.9.0(2015-04-28)&その1

• Change

• aio(と(rtsig(イベントメソッドが削除された

• rtsig(とは(librt(を用いた非同期処理の手法

• upstream!ブロック内で!zoneディレクティブが利用可能

• アップストリームを各ワーカープロセス間で共有できる

2015/06/22'社内プロダクト勉強会'('TAKAMURA'Narimichi 12

Page 13: Nginx-201501-201506

upstream!ブロック内で!zone!ディレクティブを使うupstream backends { zone zone_for_backends 64k; server 127.0.0.1:8000; server 127.0.0.1:8001; server 127.0.0.1:8002; ...}

2015/06/22'社内プロダクト勉強会'('TAKAMURA'Narimichi 13

Page 14: Nginx-201501-201506

Nginx&1.9.0(2015-04-28)&その2

• Feature

• ngx_stream_core_module!モジュールが新たに利用可能

• ngx_http_memcached_module(が(byte(ranges(request3(をサポート

3"14"Header"Field"Defini0ons

2015/06/22'社内プロダクト勉強会'('TAKAMURA'Narimichi 14

Page 15: Nginx-201501-201506

ngx_stream_core_module!モジュールの利用例

TCP$Load$Balancing$ができる$→$HA$Proxy$などの代替になるかもstream { upstream backend { hash $remote_addr consistent;

server backend1.example.com:12345 weight=5; server 127.0.0.1:12345 max_fails=3 fail_timeout=30s; server unix:/tmp/backend3; }}

2015/06/22'社内プロダクト勉強会'('TAKAMURA'Narimichi 15

Page 16: Nginx-201501-201506

Nginx&1.9.1(2015-05-26)&その1

• Change

• SSLv3%がデフォルトで%disabled

• 長い間非推奨だったいくつかのディレクティブが利用不可4

• 具体的なディレクティブ書いてなくて怖い

• connections)は利用できなくなった様子4"Removed"the"deprecated""connec1ons""direc1ve.

2015/06/22'社内プロダクト勉強会'('TAKAMURA'Narimichi 16

Page 17: Nginx-201501-201506

Nginx&1.9.1(2015-05-26)&その2

• Feature

• reuseport!が!listen!ディレクティブで利用可能

• upstream_connect_time(変数が利用可能に

2015/06/22'社内プロダクト勉強会'('TAKAMURA'Narimichi 17

Page 18: Nginx-201501-201506

reuseport!の設定例

Linux&Kernel&3.9&からサポートされた&SO_REUSEPORT4&を利用する

listen 443 ssl spdy reuseport;

Linux&の場合は難あり(DragonFly&BSDはOKとのこと)5&6

6"changeset"6153:4f6efabcb09b

5"Merge"branch"'soreuseport'

4"Removed"the"deprecated""connec1ons""direc1ve.

2015/06/22'社内プロダクト勉強会'('TAKAMURA'Narimichi 18

Page 19: Nginx-201501-201506

Nginx&1.9.2(2015-06-16)&その1

• Feature

• backlog(パラメータが(mail(proxy(と(stream(モジュールにおける(listen(ディレクティブで利用可能に

• backlog=numberはバックログキューの長さを指定するパラメータ

2015/06/22'社内プロダクト勉強会'('TAKAMURA'Narimichi 19

Page 20: Nginx-201501-201506

Nginx&1.9.2(2015-06-16)&その2

• Feature

• stream*モジュールで以下の機能が利用可能

• allow,*deny*ディレクティブ(アクセス制御)

• proxy_bind*ディレクティブ(アドレス変換)

• proxy_protocol*ディレクティブ(ProxyProtocolサポート)

2015/06/22'社内プロダクト勉強会'('TAKAMURA'Narimichi 20

Page 21: Nginx-201501-201506

Nginx&1.9.2(2015-06-16)&その3

• Feature

• nginx(コマンドに(-T(オプションが追加

• コンフィグテスト実施後、設定ファイルをダンプする

• ちなみに既存の(-t(はコンフィグテストのみ行う

2015/06/22'社内プロダクト勉強会'('TAKAMURA'Narimichi 21

Page 22: Nginx-201501-201506

Nginx&1.9.2(2015-06-16)&その4

• Bugfix

• reuseport'が正常に動作しない問題を解決

• OCSP'stapling'利用時にいくつかのケースにおいて有効期限が切れたOCSPレスポンスを返す問題を解決

2015/06/22'社内プロダクト勉強会'('TAKAMURA'Narimichi 22

Page 23: Nginx-201501-201506

感想!その1

• アツいと感じた変更点

• デフォルト"SSLv3"無効化

• upstream"内で"zone"が使える

• stream"モジュール

• OCSP"stapling"で期限切れレスポンス返しちゃうバグの解消

2015/06/22'社内プロダクト勉強会'('TAKAMURA'Narimichi 23

Page 24: Nginx-201501-201506

感想!その2

• 「新機能リリース」"→"「直後に"Bugfix」の流れが多いので新機能をすぐに利用する場合は要注意

• nginx -T"はだれかが捗る予感

• ngx_http_spdy_module"のバグ修正の頻度が減ってきた

2015/06/22'社内プロダクト勉強会'('TAKAMURA'Narimichi 24

Page 25: Nginx-201501-201506

おしまい

2015/06/22'社内プロダクト勉強会'('TAKAMURA'Narimichi 25