Nginxの高性能Webサーバーアーキテクチャと運用

Nginx概要

Nginxとは

Nginxは高性能なHTTPおよびリバースプロキシサーバーです。軽量で高効率なWebサーバー/リバースプロキシ/メール(IMAP/POP3)プロキシ機能を提供し、単一物理サーバーで30,000~50,000の同時接続を処理可能です。

  • 高い安定性
  • 低いシステムリソース消費
  • HTTP同時接続処理能力に優れる

同時接続性能に影響する要因

  1. CPUコア数
  2. システムの最大ファイルディスクリプタ数

主要な利用シナリオ

  • 静的コンテンツ配信(画像・動画)
  • 動的コンテンツ処理
  • リバースプロキシと負荷分散
  • キャッシュサービス

レイヤー別プロキシ機能

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モデル分類

  1. ブロッキングI/O
  2. ノンブロッキングI/O
  3. I/O多重化
  4. シグナル駆動I/O
  5. 非同期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

タグ: nginx Webサーバー リバースプロキシ I/Oモデル ソースインストール

8月4日 17:11 投稿