Nginx(エンジンエックス)はC10K問題を解決するイベント駆動アーキテクチャを採用した高性能Webサーバー。Webサーバー・リバースプロキシ・ロードバランサーとしての役割、設定の書き方、Apacheとの違いを解説。
Nginx(エンジンエックス)とは、高性能なWebサーバー・リバースプロキシ・ロードバランサーとして機能するオープンソースソフトウェアです。Igor Sysoevが2004年に公開しました。従来のApacheがプロセス/スレッドベースで同時接続数に限界があったのに対し、Nginxは非同期イベント駆動アーキテクチャを採用することでC10K問題(1万接続同時処理の問題)を解決しました。現在世界で最も使われているWebサーバーの一つで、Netflix・Airbnb・GitHubなど大規模サービスでの採用実績があります。
HTML・CSS・JavaScript・画像などの静的ファイルを高速に配信します。少ないメモリで大量の同時接続を処理でき、静的コンテンツの配信速度はApacheより優れています。
クライアントからのリクエストを受け取り、Node.js・Python(Django/Flask)・RubyなどのアプリケーションサーバーへHTTPで転送します。バックエンドを外部から隠蔽し、SSL終端・圧縮・キャッシュも担います。
複数のバックエンドサーバーへリクエストを分散させ、高可用性と水平スケールを実現します。ラウンドロビン・最小接続数・IPハッシュなど複数の分散方式に対応しています。
| 項目 | Nginx | Apache |
|---|---|---|
| アーキテクチャ | 非同期イベント駆動 | プロセス/スレッドベース |
| 同時接続数 | 非常に多い(数万) | 接続数に比例してリソース増加 |
| メモリ消費 | 少ない(高負荷でも安定) | 接続数に比例して増加 |
| 静的ファイル配信速度 | 非常に高速 | 普通 |
| .htaccess対応 | 非対応(設定はnginx.conf) | 対応(ディレクトリ単位で設定) |
| PHPの実行 | PHP-FPMと組み合わせが必要 | mod_phpで直接実行可能 |
Nginxの設定ファイル(通常 /etc/nginx/nginx.conf や /etc/nginx/conf.d/default.conf)の基本的な構成例です。
proxy_pass でバックエンドへ転送し、/static/ パスの静的ファイルはNginxが直接配信する構成例です。
高トラフィックな静的コンテンツ配信・リバースプロキシ用途ならNginxが優れています。.htaccessによる柔軟なディレクトリ設定やPHPとの親和性を重視するならApacheが適しています。現代のWebサービスでは性能面からNginxを選ぶケースが主流となっています。
リバースプロキシとは、クライアントからのリクエストを受け取り、バックエンドサーバー(アプリケーションサーバーやAPIサーバー)に転送する中継役のサーバーです。バックエンドの実態を隠蔽しつつ、ロードバランシングやSSL終端、キャッシュなどの機能を提供します。
SSL/TLS終端(SSL termination)とは、Nginxなどのリバースプロキシ層でHTTPS通信を復号化し、バックエンドには平文のHTTPとして転送する手法です。バックエンドサーバー側でSSL処理を不要にすることで、全体のパフォーマンスを向上させる効果があります。
ITエンジニア向け転職サービス2強を並行利用するのが最も効果的です。
※どちらも完全無料。登録だけで市場価値を確認できます。