Nginx概要
Nginxとは
Nginxは高性能なHTTPおよびリバースプロキシサーバーです。軽量で高効率なWebサーバー/リバースプロキシ/メール(IMAP/POP3)プロキシ機能を提供し、単一物理サーバーで30,000~50,000の同時接続を処理可能です。
- 高い安定性
- 低いシステムリソース消費
- HTTP同時接続処理能力に優れる
同時接続性能に影響する要因
- CPUコア数
- システムの最大ファイルディスクリプタ数
主要な利用シナリオ
- 静的コンテンツ配信(画像・動画)
- 動的コンテンツ処理
- リバースプロキシと負荷分散
- キャッシュサービス
レイヤー別プロキシ機能
HTTP七層プロキシ(アプリケーション層)ではURIベースのリクエスト分配が可能ですが、プロトコル解析のオーバーヘッドが発生します。四層(トランスポート層)プロキシでは単純なTCP/UDP転送を行うため、高性能な転送が実現されます。
リバースプロキシの特徴
クライアントが直接ターゲットサーバーを知る必要がなく、リバースプロキシ経由でリソースを取得します。
利点
- 内部サーバーの安全性向上
- アクセス速度の改善
- IPリソースの効率的利用
パッケージインストール
# EPELリポジトリ追加
sudo yum -y install epel-release
# Nginxインストール
sudo yum -y install nginx
# バージョン確認
nginx -v
ソースからのインストール
# 公式リポジトリ追加
cat <<EOF | sudo tee /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
# インストール実行
sudo yum -y install nginx
NginxとApacheの比較
Nginxの優位点
- 軽量でリソース消費少ない
- 非ブロッキングI/Oによる高並列処理
- 高モジュール化設計
Apacheの優位点
- 高度なリライト機能
- 豊富なモジュール群
- 安定性の実績
アーキテクチャの根本的差異
Apacheは同期型マルチプロセスモデル(1接続=1プロセス)、Nginxは非同期モデル(複数接続=1プロセス)を採用しています。
I/O処理モデル
ゼロコピー技術
従来のデータコピー方式ではカーネル空間とユーザー空間間の転送がパフォーマンスボトルネックでした。mmapによるメモリマッピングにより、このオーバーヘッドを削減します。
I/Oモデル分類
- ブロッキングI/O
- ノンブロッキングI/O
- I/O多重化
- シグナル駆動I/O
- 非同期I/O
I/O多重化実装
| 方式 | 特徴 | 制限 |
|---|---|---|
| select | 広範な互換性 | FD数制限(通常1024) |
| poll | 接続数無制限 | 大量FDで性能低下 |
| epoll | コールバックベース処理 | Linux専用実装 |
Nginxアーキテクチャ
主要機能
- 静的コンテンツ配信
- HTTP/HTTPSリバースプロキシ
- FastCGI/uWSGI連携
- TCP/UDPレイヤー転送
プロセス構成
- マスタープロセス
- 設定読み込み、ワーカー管理、グレースフルリスタート処理
- ワーカープロセス
- 実際のリクエスト処理、I/O操作、クライアント応答
モジュール体系
- コアモジュール:基本機能提供
- HTTPモジュール:プロトコル処理
- ストリームモジュール:TCP/UDPプロキシ
- サードパーティモジュール:拡張機能
ソースからのインストール手順
# 依存関係インストール
sudo yum -y install gcc pcre-devel openssl-devel zlib-devel
# ユーザー作成
sudo useradd -r -s /sbin/nologin www-service
# ソース取得
curl -O http://nginx.org/download/nginx-1.24.0.tar.gz
tar xzf nginx-1.24.0.tar.gz
cd nginx-1.24.0
# ビルド設定
./configure \
--prefix=/usr/local/nginx \
--user=www-service \
--group=www-service \
--with-http_ssl_module \
--with-http_v2_module \
--with-stream
# コンパイルとインストール
make
sudo make install
# システム統合
sudo ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/
基本操作
# 起動
sudo nginx
# 停止
sudo nginx -s quit
# 設定再読み込み
sudo nginx -s reload