SlideShare ist ein Scribd-Unternehmen logo
1 von 10
軽量高機能webサーバーnginx Takayuki Hirayama 1 Copyright 2010  Fractalist inc. All rights reserved.
概要 nginx 「エンジンエックス」と読む 軽量、高機能webサーバー 2010年2月現在第4位のシェア 採用実績 Wordpress(http://wordpress.com/) GitHub(http://github.com/) SourceForge(http://sourceforge.net/) 2 Copyright 2010  Fractalist inc. All rights reserved. 出典:http://news.netcraft.com/
Apacheじゃダメなの? 高機能=リソース消費 例:消費メモリ Apache  数十KB~/プロセス リクエストの数だけプロセス発生(preforkの場合) nginx 数KB~/プロセス 1ワーカーあたり複数リクエストを捌ける(一般的にCPU orCPUコア数=ワーカー数) C10K問題 接続数 10K=10,000 というのが今後日常化していく Ajaxなどの技術 1リクエスト1プロセス/スレッドモデルとかだと耐えられなくなる 特に、リバースプロキシーサーバーなど nginxの場合、1ワーカーで数千単位のリクエストを並列処理できる 3 Copyright 2010  Fractalist inc. All rights reserved.
多彩な機能 4 Copyright 2010  Fractalist inc. All rights reserved. 標準モジュール アクセス制御 認証 バーチャルホスト HTTPプロキシ Request Rewriting ロードバランシング リソース制限 ログフォーマットカスタマイズ FastCGI Gzip圧縮フィルタ Server Side Include memcached連携コンテンツキャッシュ 追加モジュール HTTPS/SSL コンテンツフィルタ WebDAV サーバーステータスレポート FLVストリーミング サードパーティモジュール PAM認証 MP4ストリーミング WSGI ZIP圧縮
リバースプロキシとして利用する 5 Copyright 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.1 192.168.0.2 192.168.0.3
アプリケーションサーバーとして利用する 拡張する方法はいくつか CGI FastCGI WSGI 組み込みPerl モジュール(C言語) 6 Copyright 2010  Fractalist inc. All rights reserved.
組み込みPerl 7 Copyright 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;
組み込みPerlの弱点 8 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 => amp;send_response);    return OK; } sub send_response {    my $r = shift;     $r->send_http_header(‘text/plain’);    $r->print(“hello, world!”);    return OK;} 1;
nginxモジュール(C言語) 9 Copyright 2010  Fractalist inc. All rights reserved. 長所 nginx本体の並列処理の機能に載っかれる 専用ライブラリが整備されてる Apacheモジュールのようなリソースプール リスト、配列や正規表現、mutex排他制御などのライブラリが揃ってる 短所 ドキュメントが少ない Emiller's Guide To Nginx Module Developmenthttp://www.evanmiller.org/nginx-modules-guide.html ApacheのようなDSO構造ではないので、毎回本体と一緒にビルドする必要がある(意図的?)
まとめ 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/

Weitere ähnliche Inhalte

Was ist angesagt?

DockerとKubernetesが作る未来
DockerとKubernetesが作る未来DockerとKubernetesが作る未来
DockerとKubernetesが作る未来Kazuto Kusama
 
パブリッククラウドConoHaを使ってOpenStack APIを理解する
パブリッククラウドConoHaを使ってOpenStack APIを理解するパブリッククラウドConoHaを使ってOpenStack APIを理解する
パブリッククラウドConoHaを使ってOpenStack APIを理解するHironobu Saitoh
 
Wowzaを用いた配信基盤 Takusuta tech conf01
Wowzaを用いた配信基盤 Takusuta tech conf01Wowzaを用いた配信基盤 Takusuta tech conf01
Wowzaを用いた配信基盤 Takusuta tech conf01Kazuhiro Ota
 
Dockerの改修を一緒にやりませんか
Dockerの改修を一緒にやりませんかDockerの改修を一緒にやりませんか
Dockerの改修を一緒にやりませんかaxsh co., LTD.
 
机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B
机上の Kubernetes -  形式手法で見るコンテナオーケストレーション #NGK2016B机上の Kubernetes -  形式手法で見るコンテナオーケストレーション #NGK2016B
机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016By_taka_23
 
Using LXC on Production
Using LXC on ProductionUsing LXC on Production
Using LXC on ProductionIsao Shimizu
 
Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」Takuya ASADA
 
Kubernetesを触ってみた
Kubernetesを触ってみたKubernetesを触ってみた
Kubernetesを触ってみたKazuto Kusama
 
re:Grouth 2020 : AWS Infrastrucuter Serviceの進化 2020
re:Grouth 2020 : AWS Infrastrucuter Serviceの進化 2020re:Grouth 2020 : AWS Infrastrucuter Serviceの進化 2020
re:Grouth 2020 : AWS Infrastrucuter Serviceの進化 2020Shuji Kikuchi
 
Kubernetes超入門 with java
Kubernetes超入門 with javaKubernetes超入門 with java
Kubernetes超入門 with javaYasunari Tanaka
 
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」Takuya ASADA
 
いろいろなデバイスでOpenVNetを動かしてみようとした。
いろいろなデバイスでOpenVNetを動かしてみようとした。いろいろなデバイスでOpenVNetを動かしてみようとした。
いろいろなデバイスでOpenVNetを動かしてみようとした。skipping classes
 
GUI&基本操作、CLI編
GUI&基本操作、CLI編GUI&基本操作、CLI編
GUI&基本操作、CLI編Go Chiba
 
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計maebashi
 
Containerで変わるDevOps
Containerで変わるDevOpsContainerで変わるDevOps
Containerで変わるDevOpsshokiri
 
シーサーでのInfiniBand導入事例
シーサーでのInfiniBand導入事例シーサーでのInfiniBand導入事例
シーサーでのInfiniBand導入事例Naoto MATSUMOTO
 
GNS3上の仮想アプライアンス+GitLabRunner+BDDによるテスト自動化
GNS3上の仮想アプライアンス+GitLabRunner+BDDによるテスト自動化GNS3上の仮想アプライアンス+GitLabRunner+BDDによるテスト自動化
GNS3上の仮想アプライアンス+GitLabRunner+BDDによるテスト自動化Shigeru Tsubota
 
Cloud founryインストール手順
Cloud founryインストール手順Cloud founryインストール手順
Cloud founryインストール手順Kotaro Noyama
 
kubernetes(GKE)環境におけるdatadog利用
kubernetes(GKE)環境におけるdatadog利用kubernetes(GKE)環境におけるdatadog利用
kubernetes(GKE)環境におけるdatadog利用Koichi HARUNA
 

Was ist angesagt? (20)

DockerとKubernetesが作る未来
DockerとKubernetesが作る未来DockerとKubernetesが作る未来
DockerとKubernetesが作る未来
 
パブリッククラウドConoHaを使ってOpenStack APIを理解する
パブリッククラウドConoHaを使ってOpenStack APIを理解するパブリッククラウドConoHaを使ってOpenStack APIを理解する
パブリッククラウドConoHaを使ってOpenStack APIを理解する
 
Wowzaを用いた配信基盤 Takusuta tech conf01
Wowzaを用いた配信基盤 Takusuta tech conf01Wowzaを用いた配信基盤 Takusuta tech conf01
Wowzaを用いた配信基盤 Takusuta tech conf01
 
Dockerの改修を一緒にやりませんか
Dockerの改修を一緒にやりませんかDockerの改修を一緒にやりませんか
Dockerの改修を一緒にやりませんか
 
机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B
机上の Kubernetes -  形式手法で見るコンテナオーケストレーション #NGK2016B机上の Kubernetes -  形式手法で見るコンテナオーケストレーション #NGK2016B
机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B
 
Using LXC on Production
Using LXC on ProductionUsing LXC on Production
Using LXC on Production
 
Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」
 
Kubernetesを触ってみた
Kubernetesを触ってみたKubernetesを触ってみた
Kubernetesを触ってみた
 
re:Grouth 2020 : AWS Infrastrucuter Serviceの進化 2020
re:Grouth 2020 : AWS Infrastrucuter Serviceの進化 2020re:Grouth 2020 : AWS Infrastrucuter Serviceの進化 2020
re:Grouth 2020 : AWS Infrastrucuter Serviceの進化 2020
 
Kubernetes超入門 with java
Kubernetes超入門 with javaKubernetes超入門 with java
Kubernetes超入門 with java
 
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
 
いろいろなデバイスでOpenVNetを動かしてみようとした。
いろいろなデバイスでOpenVNetを動かしてみようとした。いろいろなデバイスでOpenVNetを動かしてみようとした。
いろいろなデバイスでOpenVNetを動かしてみようとした。
 
GUI&基本操作、CLI編
GUI&基本操作、CLI編GUI&基本操作、CLI編
GUI&基本操作、CLI編
 
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
 
Containerで変わるDevOps
Containerで変わるDevOpsContainerで変わるDevOps
Containerで変わるDevOps
 
シーサーでのInfiniBand導入事例
シーサーでのInfiniBand導入事例シーサーでのInfiniBand導入事例
シーサーでのInfiniBand導入事例
 
GNS3上の仮想アプライアンス+GitLabRunner+BDDによるテスト自動化
GNS3上の仮想アプライアンス+GitLabRunner+BDDによるテスト自動化GNS3上の仮想アプライアンス+GitLabRunner+BDDによるテスト自動化
GNS3上の仮想アプライアンス+GitLabRunner+BDDによるテスト自動化
 
Cloud founryインストール手順
Cloud founryインストール手順Cloud founryインストール手順
Cloud founryインストール手順
 
kubernetes(GKE)環境におけるdatadog利用
kubernetes(GKE)環境におけるdatadog利用kubernetes(GKE)環境におけるdatadog利用
kubernetes(GKE)環境におけるdatadog利用
 
Cloud Foundry varz
Cloud Foundry varzCloud Foundry varz
Cloud Foundry varz
 

Andere mochten auch

Q4 Mでメッセージキュー
Q4 MでメッセージキューQ4 Mでメッセージキュー
Q4 Mでメッセージキューngi group.
 
素敵なjavascript ~google chrome編~
素敵なjavascript ~google chrome編~素敵なjavascript ~google chrome編~
素敵なjavascript ~google chrome編~ngi group.
 
20091119_sinatraを使ってみた
20091119_sinatraを使ってみた20091119_sinatraを使ってみた
20091119_sinatraを使ってみたngi group.
 
SvnからGitへの移行について
SvnからGitへの移行についてSvnからGitへの移行について
SvnからGitへの移行についてngi group.
 
RubyとPost Gis
RubyとPost GisRubyとPost Gis
RubyとPost Gisngi group.
 
muninで簡単&自在サーバーモニタリング
muninで簡単&自在サーバーモニタリングmuninで簡単&自在サーバーモニタリング
muninで簡単&自在サーバーモニタリングngi group.
 
Git紹介~入門編~
Git紹介~入門編~Git紹介~入門編~
Git紹介~入門編~ngi group.
 
フラクタリスト技術知識共有会発表資料 090903
フラクタリスト技術知識共有会発表資料 090903フラクタリスト技術知識共有会発表資料 090903
フラクタリスト技術知識共有会発表資料 090903ngi group.
 
Html5 入門編 その2
Html5 入門編 その2Html5 入門編 その2
Html5 入門編 その2ngi group.
 
素敵なjavascript ~Firefox編 ~
素敵なjavascript ~Firefox編 ~素敵なjavascript ~Firefox編 ~
素敵なjavascript ~Firefox編 ~ngi group.
 
正規表現のススメ_20091217
正規表現のススメ_20091217正規表現のススメ_20091217
正規表現のススメ_20091217ngi group.
 
Mixiアプリで体験する Open Social
Mixiアプリで体験する Open SocialMixiアプリで体験する Open Social
Mixiアプリで体験する Open Socialngi group.
 
Zshって最強らしい
Zshって最強らしいZshって最強らしい
Zshって最強らしいngi group.
 
Perl 非同期プログラミング
Perl 非同期プログラミングPerl 非同期プログラミング
Perl 非同期プログラミングlestrrat
 
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】MOCKS | Yuta Morishige
 

Andere mochten auch (19)

Q4 Mでメッセージキュー
Q4 MでメッセージキューQ4 Mでメッセージキュー
Q4 Mでメッセージキュー
 
素敵なjavascript ~google chrome編~
素敵なjavascript ~google chrome編~素敵なjavascript ~google chrome編~
素敵なjavascript ~google chrome編~
 
Yii紹介
Yii紹介Yii紹介
Yii紹介
 
20091119_sinatraを使ってみた
20091119_sinatraを使ってみた20091119_sinatraを使ってみた
20091119_sinatraを使ってみた
 
The Royal Lagoon Bhubaneswar
The Royal Lagoon Bhubaneswar The Royal Lagoon Bhubaneswar
The Royal Lagoon Bhubaneswar
 
SvnからGitへの移行について
SvnからGitへの移行についてSvnからGitへの移行について
SvnからGitへの移行について
 
RubyとPost Gis
RubyとPost GisRubyとPost Gis
RubyとPost Gis
 
muninで簡単&自在サーバーモニタリング
muninで簡単&自在サーバーモニタリングmuninで簡単&自在サーバーモニタリング
muninで簡単&自在サーバーモニタリング
 
Git紹介~入門編~
Git紹介~入門編~Git紹介~入門編~
Git紹介~入門編~
 
フラクタリスト技術知識共有会発表資料 090903
フラクタリスト技術知識共有会発表資料 090903フラクタリスト技術知識共有会発表資料 090903
フラクタリスト技術知識共有会発表資料 090903
 
Html5 入門編 その2
Html5 入門編 その2Html5 入門編 その2
Html5 入門編 その2
 
素敵なjavascript ~Firefox編 ~
素敵なjavascript ~Firefox編 ~素敵なjavascript ~Firefox編 ~
素敵なjavascript ~Firefox編 ~
 
正規表現のススメ_20091217
正規表現のススメ_20091217正規表現のススメ_20091217
正規表現のススメ_20091217
 
Tokyo Cabinet
Tokyo CabinetTokyo Cabinet
Tokyo Cabinet
 
Mixiアプリで体験する Open Social
Mixiアプリで体験する Open SocialMixiアプリで体験する Open Social
Mixiアプリで体験する Open Social
 
Zshって最強らしい
Zshって最強らしいZshって最強らしい
Zshって最強らしい
 
Perl 非同期プログラミング
Perl 非同期プログラミングPerl 非同期プログラミング
Perl 非同期プログラミング
 
しょぼいプレゼンをパワポのせいにするな! by @jessedee
しょぼいプレゼンをパワポのせいにするな! by @jessedeeしょぼいプレゼンをパワポのせいにするな! by @jessedee
しょぼいプレゼンをパワポのせいにするな! by @jessedee
 
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
 

Ähnlich wie 軽量高機能webサーバーnginx

Webサーバの基礎知識【編集済み】
Webサーバの基礎知識【編集済み】Webサーバの基礎知識【編集済み】
Webサーバの基礎知識【編集済み】Kikunaga Taishi
 
これから利用拡大?WebSocket
これから利用拡大?WebSocketこれから利用拡大?WebSocket
これから利用拡大?WebSocketAdvancedTechNight
 
YAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web service
YAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web serviceYAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web service
YAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web serviceKazuho Oku
 
Introduction of Rancher at OSC Tokyo 17 Spring
Introduction of Rancher at OSC Tokyo 17 SpringIntroduction of Rancher at OSC Tokyo 17 Spring
Introduction of Rancher at OSC Tokyo 17 SpringGo Chiba
 
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...さくらインターネット株式会社
 
コンテナの基本 ~Docker実践~
コンテナの基本 ~Docker実践~コンテナの基本 ~Docker実践~
コンテナの基本 ~Docker実践~Ryosuke Uchiyama
 
Lesson01
Lesson01Lesson01
Lesson01MRI
 
Dockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しようDockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しようTakashi Makino
 
2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet Services2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet ServicesNaoto Gohko
 
Kyoto Tycoon Guide in Japanese
Kyoto Tycoon Guide in JapaneseKyoto Tycoon Guide in Japanese
Kyoto Tycoon Guide in JapaneseMikio Hirabayashi
 
H2O - making HTTP better
H2O - making HTTP betterH2O - making HTTP better
H2O - making HTTP betterKazuho Oku
 
20101018 JJUG CCC10 WindowsAzure
20101018 JJUG CCC10 WindowsAzure20101018 JJUG CCC10 WindowsAzure
20101018 JJUG CCC10 WindowsAzureShinichiro Isago
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門Kohei Tokunaga
 
Railsの運用について
Railsの運用についてRailsの運用について
Railsの運用についてYuuki Namikawa
 
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化シスコシステムズ合同会社
 

Ähnlich wie 軽量高機能webサーバーnginx (20)

Nginx
NginxNginx
Nginx
 
Webサーバの基礎知識【編集済み】
Webサーバの基礎知識【編集済み】Webサーバの基礎知識【編集済み】
Webサーバの基礎知識【編集済み】
 
これから利用拡大?WebSocket
これから利用拡大?WebSocketこれから利用拡大?WebSocket
これから利用拡大?WebSocket
 
YAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web service
YAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web serviceYAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web service
YAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web service
 
Introduction of Rancher at OSC Tokyo 17 Spring
Introduction of Rancher at OSC Tokyo 17 SpringIntroduction of Rancher at OSC Tokyo 17 Spring
Introduction of Rancher at OSC Tokyo 17 Spring
 
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
 
コンテナの基本 ~Docker実践~
コンテナの基本 ~Docker実践~コンテナの基本 ~Docker実践~
コンテナの基本 ~Docker実践~
 
Lesson01
Lesson01Lesson01
Lesson01
 
EditShare システムの紹介
EditShare システムの紹介EditShare システムの紹介
EditShare システムの紹介
 
Dockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しようDockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しよう
 
2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet Services2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet Services
 
Kyoto Tycoon Guide in Japanese
Kyoto Tycoon Guide in JapaneseKyoto Tycoon Guide in Japanese
Kyoto Tycoon Guide in Japanese
 
H2O - making HTTP better
H2O - making HTTP betterH2O - making HTTP better
H2O - making HTTP better
 
Ad stirの裏側
Ad stirの裏側Ad stirの裏側
Ad stirの裏側
 
20101018 JJUG CCC10 WindowsAzure
20101018 JJUG CCC10 WindowsAzure20101018 JJUG CCC10 WindowsAzure
20101018 JJUG CCC10 WindowsAzure
 
[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
Study2study3 nslope
Study2study3 nslopeStudy2study3 nslope
Study2study3 nslope
 
Railsの運用について
Railsの運用についてRailsの運用について
Railsの運用について
 
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化
 

軽量高機能webサーバーnginx

  • 1. 軽量高機能webサーバーnginx Takayuki Hirayama 1 Copyright 2010  Fractalist inc. All rights reserved.
  • 2. 概要 nginx 「エンジンエックス」と読む 軽量、高機能webサーバー 2010年2月現在第4位のシェア 採用実績 Wordpress(http://wordpress.com/) GitHub(http://github.com/) SourceForge(http://sourceforge.net/) 2 Copyright 2010  Fractalist inc. All rights reserved. 出典:http://news.netcraft.com/
  • 3. Apacheじゃダメなの? 高機能=リソース消費 例:消費メモリ Apache 数十KB~/プロセス リクエストの数だけプロセス発生(preforkの場合) nginx 数KB~/プロセス 1ワーカーあたり複数リクエストを捌ける(一般的にCPU orCPUコア数=ワーカー数) C10K問題 接続数 10K=10,000 というのが今後日常化していく Ajaxなどの技術 1リクエスト1プロセス/スレッドモデルとかだと耐えられなくなる 特に、リバースプロキシーサーバーなど nginxの場合、1ワーカーで数千単位のリクエストを並列処理できる 3 Copyright 2010  Fractalist inc. All rights reserved.
  • 4. 多彩な機能 4 Copyright 2010  Fractalist inc. All rights reserved. 標準モジュール アクセス制御 認証 バーチャルホスト HTTPプロキシ Request Rewriting ロードバランシング リソース制限 ログフォーマットカスタマイズ FastCGI Gzip圧縮フィルタ Server Side Include memcached連携コンテンツキャッシュ 追加モジュール HTTPS/SSL コンテンツフィルタ WebDAV サーバーステータスレポート FLVストリーミング サードパーティモジュール PAM認証 MP4ストリーミング WSGI ZIP圧縮
  • 5. リバースプロキシとして利用する 5 Copyright 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.1 192.168.0.2 192.168.0.3
  • 6. アプリケーションサーバーとして利用する 拡張する方法はいくつか CGI FastCGI WSGI 組み込みPerl モジュール(C言語) 6 Copyright 2010  Fractalist inc. All rights reserved.
  • 7. 組み込みPerl 7 Copyright 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の弱点 8 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 => amp;send_response); return OK; } sub send_response { my $r = shift; $r->send_http_header(‘text/plain’); $r->print(“hello, world!”); return OK;} 1;
  • 9. nginxモジュール(C言語) 9 Copyright 2010  Fractalist inc. All rights reserved. 長所 nginx本体の並列処理の機能に載っかれる 専用ライブラリが整備されてる Apacheモジュールのようなリソースプール リスト、配列や正規表現、mutex排他制御などのライブラリが揃ってる 短所 ドキュメントが少ない Emiller's Guide To Nginx Module Developmenthttp://www.evanmiller.org/nginx-modules-guide.html ApacheのようなDSO構造ではないので、毎回本体と一緒にビルドする必要がある(意図的?)
  • 10. まとめ 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/