Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

軽量高機能webサーバーnginx

6,398 views

Published on

2010/03/11 フラクタリスト技術知識共有会発表資料

軽量高機能webサーバーnginx

  1. 1. 軽量高機能webサーバーnginx<br />Takayuki Hirayama<br />1<br />Copyright 2010  Fractalist inc. All rights reserved.<br />
  2. 2. 概要<br />nginx<br />「エンジンエックス」と読む<br />軽量、高機能webサーバー<br />2010年2月現在第4位のシェア<br />採用実績<br />Wordpress(http://wordpress.com/)<br />GitHub(http://github.com/)<br />SourceForge(http://sourceforge.net/)<br />2<br />Copyright 2010  Fractalist inc. All rights reserved.<br />出典:http://news.netcraft.com/<br />
  3. 3. Apacheじゃダメなの?<br />高機能=リソース消費<br />例:消費メモリ<br />Apache <br />数十KB~/プロセス<br />リクエストの数だけプロセス発生(preforkの場合)<br />nginx<br />数KB~/プロセス<br />1ワーカーあたり複数リクエストを捌ける(一般的にCPU orCPUコア数=ワーカー数)<br />C10K問題<br />接続数 10K=10,000 というのが今後日常化していく<br />Ajaxなどの技術<br />1リクエスト1プロセス/スレッドモデルとかだと耐えられなくなる<br />特に、リバースプロキシーサーバーなど<br />nginxの場合、1ワーカーで数千単位のリクエストを並列処理できる<br />3<br />Copyright 2010  Fractalist inc. All rights reserved.<br />
  4. 4. 多彩な機能<br />4<br />Copyright 2010  Fractalist inc. All rights reserved.<br />標準モジュール<br />アクセス制御<br />認証<br />バーチャルホスト<br />HTTPプロキシ<br />Request Rewriting<br />ロードバランシング<br />リソース制限<br />ログフォーマットカスタマイズ<br />FastCGI<br />Gzip圧縮フィルタ<br />Server Side Include<br />memcached連携コンテンツキャッシュ<br />追加モジュール<br />HTTPS/SSL<br />コンテンツフィルタ<br />WebDAV<br />サーバーステータスレポート<br />FLVストリーミング<br />サードパーティモジュール<br />PAM認証<br />MP4ストリーミング<br />WSGI<br />ZIP圧縮<br />
  5. 5. リバースプロキシとして利用する<br />5<br />Copyright 2010  Fractalist inc. All rights reserved.<br />http {<br /> upstream backend {<br /> server 192.168.0.1:8080; weight=20; # 2倍バランス<br />server 192.168.0.2:8080; weight=10;<br />server 192.168.0.3:8080; weight=10;<br /> }<br /> server {<br /> location 80;<br />server_name example.jp;<br /> location / {<br />proxy_pass http://app;<br /> }<br /> }<br />}<br />リバースプロキシ<br />192.168.0.1<br />192.168.0.2<br />192.168.0.3<br />
  6. 6. アプリケーションサーバーとして利用する<br />拡張する方法はいくつか<br />CGI<br />FastCGI<br />WSGI<br />組み込みPerl<br />モジュール(C言語)<br />6<br />Copyright 2010  Fractalist inc. All rights reserved.<br />
  7. 7. 組み込みPerl<br />7<br />Copyright 2010  Fractalist inc. All rights reserved.<br />Apache mod_perlと遜色ない容易さで書ける<br />設定ファイル<br />Perlモジュール<br />http {<br />perl_modules/somewhere/lib;<br />perl_requireNginxTest;<br /> server {<br /> location 80;<br />server_name example.jp;<br /> location / {<br />perlNginxTest::handler;<br />}<br /> }<br />}<br />package NginxTest;<br />use nginx;<br />sub handler {<br /> my $r = shift;<br /> $r->send_http_header;<br /> $r->print("nginx by embedded perl");<br /> return OK;<br />}<br />1;<br />
  8. 8. 組み込みPerlの弱点<br />8<br />Copyright 2010  Fractalist inc. All rights reserved.<br />処理がシングルスレッドになる!<br />なのでmod_perlと比べても優位性は少ない・・<br />I/Oブロックなど発生する処理には向かない<br />但し、$r->sleep() で他リクエスト処理スレッドにyieldすることができる<br />package NginxTest;<br />use nginx;<br />sub handler {<br /> my $r = shift;<br /> $a = rand(100);<br /> $r->variable(randval => $a);<br /> $r->sleep(50 => &send_response);<br /> return OK;<br />}<br />sub send_response {<br /> my $r = shift;<br /> $r->send_http_header(‘text/plain’);<br /> $r->print(“hello, world! ”);<br /> return OK;}<br />1;<br />
  9. 9. nginxモジュール(C言語)<br />9<br />Copyright 2010  Fractalist inc. All rights reserved.<br />長所<br />nginx本体の並列処理の機能に載っかれる<br />専用ライブラリが整備されてる<br />Apacheモジュールのようなリソースプール<br />リスト、配列や正規表現、mutex排他制御などのライブラリが揃ってる<br />短所<br />ドキュメントが少ない<br />Emiller's Guide To Nginx Module Developmenthttp://www.evanmiller.org/nginx-modules-guide.html<br />ApacheのようなDSO構造ではないので、毎回本体と一緒にビルドする必要がある(意図的?)<br />
  10. 10. まとめ<br />10<br />Copyright 2010  Fractalist inc. All rights reserved.<br />まとめ<br />Apache以外にもHTTPサーバーはいろいろあるよ<br />特に最近は1スレッドで多数リクエスト捌く系のサーバーが大流行り(libeventなどイベントループを利用など)<br />その他最近の高速系サーバー<br />Varnish<br />Squidの後継とも言われる高速リバースプロキシhttp://www.varnish-cache.org/<br />Starman<br />高速PSGI互換Webサーバーhttp://search.cpan.org/dist/Starman/<br />

×