※当サイトの記事には、広告・プロモーションが含まれます。

NginxというWebサーバー

2016/4/6に『Vivaldi』というWebブラウザーの正式版がリリースされたそうです。

  詳しくは下記サイトへ

Webブラウザ「Vivaldi」が超絶便利すぎてChromeユーザーはさっさと乗り換えたほうがいい - Brian'z Imagination

 

ただ、今回はNginxというWebサーバーの話です。

Nginx(エンジンエックス)とは

フリーかつオープンソースWebサーバである。処理性能・高い並行性・メモリ使用量の小ささに焦点を当てて開発されており、HTTP, HTTPS, SMTP, POP3, IMAPリバースプロキシの機能や、ロードバランサ、HTTPキャッシュの機能も持つ。

nginxは、BSDライクライセンスでリリースされており、LinuxBSD系OS、Mac OS XSolarisAIXHP-UXMicrosoft Windowsで動作する。

nginx - Wikipedia

ロシアの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)のイメージ図

f:id:ts0818:20160505142530p:plain

Nginxによるアクセスのイメージ図 

f:id:ts0818:20160505142529p:plain

  Nginxなどについては下記サイトへ 

nginx と PHP-FPM の仕組みをちゃんと理解しながら PHP の実行環境を構築する - Qiita

  UNIXソケットについては下記サイトへ  

調べなきゃ寝れない!と調べたら余計に寝れなくなったソケットの話 - Qiita

 

PHPを例にとると?

突然ですが、PHPの実行方式には、

  • Module方式(module type)
  • CGI方式(cgi type)

大枠でModule方式とCGI方式の2種類が存在するそうです。

  詳しくは下記サイトへ

PHPのCGI方式/Module方式の違い

 

ローカルでXAMPPなどをインストールした場合、もれなくApachePHPがセットでインストールされますが、この時の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だったそうです。

CGIApacheのプロセスとは別プロセスとして起動する必要があり、処理コストがかかるということで、ModuleのようなApacheと同じプロセス内で処理してしまえ、という動きが出てきたそうです。

ただ、今度は、Moduleだと静的なコンテンツの処理が遅くなってしまうようです。

そこで、Nginxのようなサーバーの仕組みが歓迎されたようです。

CGIを使ってみんなハッピー的な流れになってるということですかね?

 

ところが、NginxでCGIは使えない、FastCGIは使える

早とちりしてしまったんですが、NginxではCGIは使えず、FastCGIというものが使えるようです。

なんでも、CGIの改良版がFastCGIというものらしいっす。

  FastCGIについて詳しくは下記サイトへ

FastCGIとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

CGIとは、Wikipediaさんによると

Common Gateway InterfaceCGI)は、ウェブサーバ上でユーザプログラムを動作させるための仕組み。現存する多くのウェブサーバプログラムはCGIの機能を利用することができる。 
近年では、ウェブサーバから外部のプログラムを呼び出すという負荷の大きい動作を避け、ウェブサーバの一部としてインタプリタを常時起動させておくことにより性能を向上させた mod_perlや、PSGI(Perl)、mod_phpFastCGIWSGI(Python) などのインタフェース・実装が一般的である。

Common Gateway Interface - Wikipedia

  NginxでCGIを動かす試みについては下記サイトへ

NginxでCGIを動かそうと頑張った話 - Qiita

 

NginxでPHPを使いたい場合は、FastCGIPHP-FPM(FastCGI Process Manager)のセットを用意するのが一般的みたいです。

いまのところ、Nginxに対応しているレンタルサーバーなどがどれくらいあるかは分かりませんが、徐々にNginxについて勉強していきたいと考えてます。

完全にNginxだけでいくかApacheと共存させるべきなのかもよく分からない感じですが。

今回はこのへんで。