nginxとは何か?エンジンエックスと呼ばれるWEBサーバです。

  • nginxの存在を最近知った
これまでHTTPサーバと言えば、ApatchとIISが2強と思っていましたが、最近はnginxが優勢の模様。ApatchとNginxについて比較という記事を読むと、Apatchよりnginxの方が高速かつ高負荷に耐えられると書いてありました。

420px-Nginx_logo.svg

  • 具体的な違い
Apacheはマルチプロセスのプロセス駆動アーキテクチャ、nginxはシングルスレッドのイベント駆動アーキテクチャ、というのが大きな違いと思われる。但し、Apacheもmpm(multi processing module)という仕組みでprefork(マルチプロセス)、worker(マルチプロセスとマルチスレッドのハイブリッド)、event(マルチスレッド)のモードを選択できる。
1
  • nginxについてもっと詳しく知りたい。

nginxで採用されているイベント駆動アーキテクチャとは、クライアント要求をイベントとしてキューイングして、プロセス内のシングルスレッドでループ処理を回してイベントを処理する方式である。

正確には1つのmasterプロセスからworkerプロセスを複数生成し、クライアント要求をworkerプロセスで処理している。プロセス数やリクエスト数は設定ファイルで制御できる。

同時接続数が増えてもプロセス・スレッドが増加しないのでC10K問題を解決可能。C10K問題とはクライアント10000台を意味するが、ある一定のクライアント要求を超えるとサーバがパンクする問題を意味する。

スレッドで動作するためメモリを共有できるが、メモリを共有するが故にスクリプト言語が組めないケースがあるらしい。つまりスレッドセーフでないWEBコードがある場合、GIL(Global Interpreter Lock)という機構で同時に実行できるスレッド数を1つに制約し、スレッドセーフでないライブラリを安全に使うことを可能とするが、反面マルチスレッドの恩恵が受けられなくなり性能が出なくなる。

非同期I/O(select、poll)を採用しており、I/O処理の完了を待たずに次の処理を実行できる。

但し、DB処理やアプリケーション実行などのCPUリソースを食う処理をnginxにやらせるとキュー溢れを引き起こすので注意が必要。

リバースプロキシとして利用できる。リバースプロキシとは、nginxにデータをキャッシュすることでインターネット上のWEBサーバの代わりにクライアントにレスポンスを返せるようにすること。クライアントとWEBサーバの間にリバースプロキシを配置し、ファイアウォールやSSLなどのセキュリティ対策を代替させることもできる。

さらにNginxのインストールと基本設定を読むと、apt-getでインストールできるし、ソースをコンパイルしてインストールすることも出来るみたい。nginx自身はデーモンとして動作する。nginx.confに設定を記載できる。
  • ひとりごと
組込エンジニアという仕事柄、WEB等のIT系の技術に触れる機会が少ないのですが、昔から興味あり。またフリーランス業界ではWEBの業務依頼がたくさんあるので定年退職後を考えたときにWEBは覚えておいて損はない。またネットワーク全般の知識も身に付きそうなところもGOOD。Node.jsみたいなサーバサイドのJavaScript環境はとっつきやすそうだし、今回紹介したnginxもハードル低そうな感じ。色々なミドルウェアが無料で使えるいい時代ですね。
270px-Node.js_logo.svg

続く
スポンサードリンク