4. 多彩な機能4Copyright 2010 Fractalist inc. All rights reserved.標準モジュールアクセス制御認証バーチャルホストHTTPプロキシRequest Rewritingロードバランシングリソース制限ログフォーマットカスタマイズFastCGIGzip圧縮フィルタServer Side Includememcached連携コンテンツキャッシュ追加モジュールHTTPS/SSLコンテンツフィルタWebDAVサーバーステータスレポートFLVストリーミングサードパーティモジュールPAM認証MP4ストリーミングWSGIZIP圧縮
5. リバースプロキシとして利用する5Copyright 2010 Fractalist inc. All rights reserved.http { upstream backend { server 192.168.0.1:8080; weight=20; # 2倍バランスserver 192.168.0.2:8080; weight=10;server 192.168.0.3:8080; weight=10; } server { location 80;server_name example.jp; location / {proxy_pass http://app; } }}リバースプロキシ192.168.0.1192.168.0.2192.168.0.3
7. 組み込みPerl7Copyright 2010 Fractalist inc. All rights reserved.Apache mod_perlと遜色ない容易さで書ける設定ファイルPerlモジュールhttp {perl_modules/somewhere/lib;perl_requireNginxTest; server { location 80;server_name example.jp; location / {perlNginxTest::handler;} }}package NginxTest;use nginx;sub handler { my $r = shift; $r->send_http_header; $r->print("nginx by embedded perl"); return OK;}1;
8. 組み込みPerlの弱点8Copyright 2010 Fractalist inc. All rights reserved.処理がシングルスレッドになる!なのでmod_perlと比べても優位性は少ない・・I/Oブロックなど発生する処理には向かない但し、$r->sleep() で他リクエスト処理スレッドにyieldすることができるpackage NginxTest;use nginx;sub handler { my $r = shift; $a = rand(100); $r->variable(randval => $a); $r->sleep(50 => \&send_response); return OK;}sub send_response { my $r = shift; $r->send_http_header(‘text/plain’); $r->print(“hello, world!\n”); return OK;}1;
9. nginxモジュール(C言語)9Copyright 2010 Fractalist inc. All rights reserved.長所nginx本体の並列処理の機能に載っかれる専用ライブラリが整備されてるApacheモジュールのようなリソースプールリスト、配列や正規表現、mutex排他制御などのライブラリが揃ってる短所ドキュメントが少ないEmiller's Guide To Nginx Module Developmenthttp://www.evanmiller.org/nginx-modules-guide.htmlApacheのようなDSO構造ではないので、毎回本体と一緒にビルドする必要がある(意図的?)
10. まとめ10Copyright 2010 Fractalist inc. All rights reserved.まとめApache以外にもHTTPサーバーはいろいろあるよ特に最近は1スレッドで多数リクエスト捌く系のサーバーが大流行り(libeventなどイベントループを利用など)その他最近の高速系サーバーVarnishSquidの後継とも言われる高速リバースプロキシhttp://www.varnish-cache.org/Starman高速PSGI互換Webサーバーhttp://search.cpan.org/dist/Starman/