金沢ではたらく新米エンジニアの日記

新幹線が来るのでその前にブログ始めてみました。

nginxってよく聞くけどApacheとどう違うかよくわからないので調べてみる。

nginxって去年めっちゃ耳にしました。
node.jsとかとセットで。nginxでリバプロとか。 webサーバーっぽいらしいんだけどじゃあApacheとどうちがうのか。
よくわからないので今から調べてみることにします。
※本当に今から調べます

えんじんえっくす?で合ってますか?読み方

nginx 読み方で検索

nginx(発音は「えんじんえっくす」[3]

nginx - Wikipedia

らしい。

本題

Nginxは2002年頃にロシアのIgor Sysoev氏によって、1日に5億リクエストを処理するWebサイトのHTTPサーバーとして開発されました。

これから始める人のためのNginx(1):高速・軽量・高機能……Nginxの基礎知識 (1/2) - @IT

らしいのです。なるほど。

どうやらその後OSSとして公開されて、C10K問題を解決できるサーバーとして注目されていったみたいです。

C10K問題

やだなー。このくらい知ってますよ。
クライアント(C)が同時に10000(10K)ほどアクセスになるとオワタ問題ですよね?

間違っていたらいやなのでちゃんと調べます。

ハードウェアの性能上は問題がなくても、クライアント数があまりにも多くなるとサーバがパンクする問題のこと。
C は「Client(クライアント)」の頭文字、10K は「1 万台」を意味する。
「クライアント 1 万台問題」ともいわれる。

C10K 問題とは - はてなキーワード

よかったあってた!

リバースプロキシサーバーとして動作するらしい

上の参考記事に書いてあった。

リーバースプロキシとして動作するので、nginxでリクエストを受け付けて、バックエンドで動くWebサーバやアプリケーションサーバに処理を振り分けるとかができるらしい。

それによって何ができるかというと、

  • ロードバランサー
  • HTTPS通信をこいつに任せられる(SSLアクセラレーションとか言うらしい?)
  • リクエストを監視して不正なデータをチェック(WAFって言うらしい?)

などなどいろいろできるみたい。

Apacheとの違いは?

パフォーマンスがすごく高いって事はわかった。
じゃあ上で挙げたことがApacheでできないかっていわれたらそうでもないらしい。

mod_proxyってのつかえばリバースプロキシ使えるみたいだし。 mod_proxy_balancer でロードバランサもできるらしい。

決定的に違うのはApacheはクライアントからの接続に対し子プロセスを作るのに対し、 nginxは接続毎にイベント処理を行うという事みたい。

なので、メモリ空間も接続毎に分かれていなくて、PHPとかの動的コンテンツが扱えない場合があるんだって。
でもその場合はアプリケーションサーバーのプロキシとして動作することでクライアントにサービスを提供するみたいです。

なるほど

何となくわかったような・・・?
実際にいじってみないとわからないと思うので今度はいろいろいじってみようかなって思います。

そして、ここに今日知りたかったことが全部書いてありました。

こういうこと調べてるとだいたい最後の方になってすごくわかりやすいのが出てくるよね。