軽量高機能webサーバーnginx

10
軽軽軽軽軽 web 軽軽軽軽 nginx Takayuki Hirayama 1 Copyright 2010 Fractalist inc. All rights reserved.

Upload: ngi-group

Post on 28-May-2015

5.730 views

Category:

Documents


3 download

DESCRIPTION

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

TRANSCRIPT

Page 1: 軽量高機能webサーバーnginx

1

軽量高機能 web サーバーnginx

Takayuki Hirayama

Copyright 2010 Fractalist inc. All rights reserved.

Page 2: 軽量高機能webサーバーnginx

2

概要nginx

「エンジンエックス」と読む軽量、高機能 web サーバー2010 年 2 月現在第 4 位のシェア採用実績

Wordpress ( http://wordpress.com/)GitHub ( http://github.com/ )SourceForge ( http://sourceforge.net/ )

Copyright 2010 Fractalist inc. All rights reserved.

出典: http://news.netcraft.com/

Page 3: 軽量高機能webサーバーnginx

3

Apacheじゃダメなの?高機能=リソース消費

例:消費メモリApache

数十 KB ~ / プロセスリクエストの数だけプロセス発生( prefork の場合)

nginx数 KB ~ / プロセス1 ワーカーあたり複数リクエストを捌ける(一般的に CPU orCPU コア数 = ワーカー数)

C10K問題接続数 10K=10,000 というのが今後日常化していく

Ajax などの技術1 リクエスト 1 プロセス / スレッドモデルとかだと耐えられなくなる

特に、リバースプロキシーサーバーなどnginx の場合、 1 ワーカーで数千単位のリクエストを並列処理できる

Copyright 2010 Fractalist inc. All rights reserved.

Page 4: 軽量高機能webサーバーnginx

4

多彩な機能

Copyright 2010 Fractalist inc. All rights reserved.

アクセス制御

認証

ロードバランシング

バーチャルホスト

HTTPプロキシ

Request Rewriting

FastCGI

Gzip圧縮フィルタ

リソース制限

ログフォーマットカスタマイズ

Server Side Include

memcached連携コンテンツキャッシュ

標準モジュール

追加モジュールHTTPS/

SSLサーバーステータスレポー

トコンテンツフィル

タWebDA

VFLVストリーミン

PAM認証

MP4ストリーミング

WSGI

ZIP圧縮

サードパーティモジュール

Page 5: 軽量高機能webサーバーnginx

5

リバースプロキシとして利用する

Copyright 2010 Fractalist inc. All rights reserved.

リバースプロキシ

192.168.0.1 192.168.0.2 192.168.0.3

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; } }}

Page 6: 軽量高機能webサーバーnginx

6

アプリケーションサーバーとして利用する

拡張する方法はいくつかCGIFastCGIWSGI組み込み Perlモジュール( C 言語)

Copyright 2010 Fractalist inc. All rights reserved.

Page 7: 軽量高機能webサーバーnginx

7

組み込み Perl

Copyright 2010 Fractalist inc. All rights reserved.

http { perl_modules /somewhere/lib; perl_require NginxTest;

server { location 80; server_name example.jp; location / { perl NginxTest::handler; } }}

package NginxTest;

use nginx;

sub handler { my $r = shift;

$r->send_http_header; $r->print("nginx by embedded perl");

return OK;}

1;

Apache mod_perlと遜色ない容易さで書ける設定ファイル Perlモジュール

Page 8: 軽量高機能webサーバーnginx

8

組み込み Perlの弱点

Copyright 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;

Page 9: 軽量高機能webサーバーnginx

9

nginxモジュール( C言語)

Copyright 2010 Fractalist inc. All rights reserved.

長所nginx 本体の並列処理の機能に載っかれる専用ライブラリが整備されてる

Apache モジュールのようなリソースプールリスト、配列や正規表現、 mutex 排他制御などのライブラリが揃ってる

短所ドキュメントが少ない

Emiller's Guide To Nginx Module Development http://www.evanmiller.org/nginx-modules-guide.html

Apache のような DSO 構造ではないので、毎回本体と一緒にビルドする必要がある(意図的?)

Page 10: 軽量高機能webサーバーnginx

10

まとめ

Copyright 2010 Fractalist inc. All rights reserved.

まとめApache 以外にも HTTP サーバーはいろいろあるよ特に最近は 1 スレッドで多数リクエスト捌く系のサーバーが大流行り( libeventなどイベントループを利用など)

その他最近の高速系サーバーVarnish

Squid の後継とも言われる高速リバースプロキシhttp://www.varnish-cache.org/

Starman高速 PSGI 互換 Web サーバーhttp://search.cpan.org/dist/Starman/