2016/4/6に『Vivaldi』というWebブラウザーの正式版がリリースされたそうです。
⇩ 詳しくは下記サイトへ
・Webブラウザ「Vivaldi」が超絶便利すぎてChromeユーザーはさっさと乗り換えたほうがいい - Brian'z Imagination
ただ、今回はNginxというWebサーバーの話です。
Nginx(エンジンエックス)とは
フリーかつオープンソースなWebサーバである。処理性能・高い並行性・メモリ使用量の小ささに焦点を当てて開発されており、HTTP, HTTPS, SMTP, POP3, IMAPのリバースプロキシの機能や、ロードバランサ、HTTPキャッシュの機能も持つ。
nginxは、BSDライクライセンスでリリースされており、Linux、BSD系OS、Mac OS X、Solaris、AIX、HP-UX、Microsoft Windowsで動作する。
ロシアのIgor Sysoev 氏が作られた、軽量・高速のWebサーバで、 エンジンエックスと読むようです。2002年開発開始、2004年公開で元々 C10K 問題に対応するためのサーバとして生まれたということみたいです。
アクセス数の多いサイト(海外では米Dropboxや米Facebook、国内ではクックパッドやヤフーなどの大手サイトが採用)でNginxが使われてるようです。
WordPress.ORGでも使われてるようです。
「C10K問題」(クライアント1万台問題)とは
ハードウェアの性能上は問題がなくても、あまりにもクライアントの数が多くなるとサーバがパンクする問題のこと。
Aapcheなどの多くのWebサーバが、10,000台のクライアントからのアクセスには耐えられないという問題です。
ApacheとNginxの違い
接続処理
まずは、接続処理のアーキテクチャが異なってることらしいです。
よく使われる接続処理のアーキテクチャとしては、
- マルチプロセスモデル
- マルチスレッドモデル
- イベント駆動モデル
の3つがあるようです。
Apache2.4系(2012年、イベント駆動型で動くmpm eventというモジュールが正式採用)からは全てのモデルに対応してるのに対し、Nginxはイベント駆動モデルのみらしいっす。
Apache2.4系から、イベント駆動モデルでの接続にも対応されるようになり、一定の条件の下では、Nginxに遜色のないアクセス数に対処できるみたいです。
⇩ 詳しくは下記サイトへ
・人間とウェブの未来 » ApacheとNginxの性能比較でevent_mpmの本気を見た のコメントのフィード
動的コンテンツの扱い
Nginxは単独では、PHPなどの動的なコンテンツを扱えないようになっていてるようで、動的な部分は他のサーバー(別プロセス)に任せてるようです。
⇩ Nginxがどうしてそのような仕組みになったのかは下記サイトへ
・nginxの動的コンテンツに対して nginxについて質問させてくださ… - 人力検索はてな
従来のアクセス(Apache)のイメージ図
Nginxによるアクセスのイメージ図
⇩ Nginxなどについては下記サイトへ
・nginx と PHP-FPM の仕組みをちゃんと理解しながら PHP の実行環境を構築する - Qiita
⇩ UNIXソケットについては下記サイトへ
・調べなきゃ寝れない!と調べたら余計に寝れなくなったソケットの話 - Qiita
PHPを例にとると?
突然ですが、PHPの実行方式には、
大枠でModule方式とCGI方式の2種類が存在するそうです。
⇩ 詳しくは下記サイトへ
ローカルでXAMPPなどをインストールした場合、もれなくApache、PHPがセットでインストールされますが、この時のApacheは、大抵の場合はModule方式でPHPが実行されているようです。
逆に、レンタルサーバーなどではCGI方式で実行されてることがほとんどなのだそうです。
⇩ その理由は下記サイトが詳しいです
モジュール版php、cgi版phpとは? | kimihiko Tech
PHPの実行方式の違い
Module方式とCGI方式の違いは、PHPの動作プロセスが、Apacheの動作プロセスと同じか異なるかということのようです。
Module方式のPHP ⇒ WebサーバーであるApacheと同じプロセスで動作させるPHP
CGI方式のPHP ⇒ WebサーバーであるApacheとは別プロセスで動作させるPHP
なんでも、動的なページ生成の先駆けはCGIだったそうです。
CGIはApacheのプロセスとは別プロセスとして起動する必要があり、処理コストがかかるということで、ModuleのようなApacheと同じプロセス内で処理してしまえ、という動きが出てきたそうです。
ただ、今度は、Moduleだと静的なコンテンツの処理が遅くなってしまうようです。
そこで、Nginxのようなサーバーの仕組みが歓迎されたようです。
CGIを使ってみんなハッピー的な流れになってるということですかね?
ところが、NginxでCGIは使えない、FastCGIは使える
早とちりしてしまったんですが、NginxではCGIは使えず、FastCGIというものが使えるようです。
なんでも、CGIの改良版がFastCGIというものらしいっす。
⇩ FastCGIについて詳しくは下記サイトへ
・FastCGIとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
近年では、ウェブサーバから外部のプログラムを呼び出すという負荷の大きい動作を避け、ウェブサーバの一部としてインタプリタを常時起動させておくことにより性能を向上させた mod_perlや、PSGI(Perl)、mod_php、FastCGI、WSGI(Python) などのインタフェース・実装が一般的である。
⇩ NginxでCGIを動かす試みについては下記サイトへ
NginxでPHPを使いたい場合は、FastCGIとPHP-FPM(FastCGI Process Manager)のセットを用意するのが一般的みたいです。
いまのところ、Nginxに対応しているレンタルサーバーなどがどれくらいあるかは分かりませんが、徐々にNginxについて勉強していきたいと考えてます。
完全にNginxだけでいくかApacheと共存させるべきなのかもよく分からない感じですが。
今回はこのへんで。