UTALI

みんなの役に立つ情報をどんどん公開していきます

初心者向け | Nginxとは? | Apacheとの相違点についても

f:id:mochizuki_p:20170424223250p:plain

Nginxとは?

Nginxとはロシアのイゴール・シソエフ(Igor Sysoev)氏が開発した高速Webサーバーソフトウェアです。その特色はノンブロッキングI/Oを採用し、大容量のデータ配信や大量同時接続に耐えることを目的に設計されたことです。

読み方

Nginxは英語での、engine xに相当する発音で、日本語ではエンジンエックスと呼ぶのが一般的です。

概要

ロシア国内では検索エンジン大手のYandexやMail.ruなどの高トラフィックサイトに採用され、現在では従来普及していたApacheサーバーを置き換える形で、世界中で急速に普及が進んでいます。

ライセンスはBSD互換で、オープンソースとして配信されています。

github.com

コードはC言語で記述されており、任意のカスタマイズ(configure)を行なって、バイナリを作成・利用することも可能です。

LinuxやFreeBSD, Solaris, MacOS, Windowsなど様々な環境で動作するのも特徴の一つです。

その特徴としては、テキストファイル、HTMLファイル、画像、動画などの静的ファイルの配信などの基本的な機能から、ロードバランサー(負荷分散)、リバースプロキシ、高速アクセスのためのキャッシュなどの高度な機能も備えています。

現在ではHTTP2にも対応しており、mrubyやluaのようなスクリプト言語を利用した機能の拡張なども可能になっています。

近年、シェアが急激に拡大

f:id:mochizuki_p:20170424222805p:plain

https://news.netcraft.com/archives/2017/03/24/march-2017-web-server-survey.html

Netcraft社の調査によれば、nginxのシェアは近年急激に伸びており、今やApacheを超える勢いです。

この図を見ると2017年3月の段階でWebサイト全体に占めるNginxのシェアは19.42%でApacheの20.89%です。

また、Apacheは2012年頃から急激にシェアを減らしており、その分をWindowsサーバーとNginxが奪った形になります。

ちなみにGoogle Web ServerはGoogleが独自に社内で開発した非公開のソフトウェアです。

シェア
Windows Server 43.16%
Apache 20.89%
nginx 19.42%
Google Web Server 1.03%

Apacheとの違いは?

結論を先に言うと、Apacheに比較して同時に大量のリクエストを裁くことが得意だと言うことです。

これについて詳しく説明します。少々ややこしいので、わからない方は飛ばし読みしてください。

最も有名なHTTPサーバーソフトウェアであるApacheが開発されたのは、1995年ですが、一部の物好きだけがインターネットを利用していた当時と異なり、インターネットの利用人口は急激に増加しています。

当時ほとんど存在しなかったスマートフォンなどによるモバイル通信サービスなどの普及も背景にあります。つまり、当時の開発者が想定していなかった規模のトラフィックに我々は直面しているのです。

NginxはApacheの問題点であるC10K問題、または1万同時接続問題を解決するために開発されました。

それはWebサーバーが同時に大量のリクエストに対応する際に、実際にRAM(メモリ)やCPUなどの機能が十分であっても、ネットワーク通信やI/O、つまり、ファイルの読み書きの待ち(ブロック)によって、リクエストを処理しきれなくなる現象のことです。

従来のApacheサーバーはリクエストのたびに、新たなプロセスを作成しますので、メモリのヒープとスタックの割り当てによるオーバーヘッド、また、通常のOSの設定ではプロセスIDの割り当てにも問題が発生します。

一方で、Nginxはある新しい機構を採用することによって、これを解決しました。それはNode.jsにも採用されたノンブロッキングI/Oと呼ばれる機構を活用することです。

ノンブロッキングI/Oの仕組みにおいては、基本的にシングルスレッドのイベントループがサーバーのリクエスト、リスポンスのようなイベントを管理します。

Nginxはワーカー(worker)と呼ばれるシングルスレッドのプロセスを複数利用することで、大量の同時接続を裁くことができます。また、これらのワーカーを管理するためのマスター(master)プロセスもあります。

この仕組みによってNginxは、平凡な性能のサーバーでも10万以上の同時接続を裁くことが可能になりました。

採用している企業

注目すべきなのはHuluやNetflixのような動画配信サービス、Yandexなどの検索エンジンを始めとした高トラフィックのサービスに採用されていることです。

世界

  • Hulu
  • Netflix
  • Yandex(ロシアの検索エンジン大手)
  • Facebook
  • Wikipedia
  • WordPress(WordPress.com)

国内

  • メルカリ
  • クックパッド
  • Togetter

期待できる機能

  • 静的サイトジェネレーターと組み合わせた静的サイトの配信
  • CDNとしての活用
  • Webアプリケーションのロードバランサー、リバースプロキシ機能
  • DDoS攻撃対策
  • 動作の遅いレガシーサイトをキャッシュで高速化

www.utali.io