Nginx

高性能なWebサーバー、リバースプロキシ、ロードバランサー。非同期イベント駆動アーキテクチャにより大量の同時接続を効率的に処理。C10K問題を解決する設計で、Docker環境での標準選択肢。

WebサーバーリバースプロキシロードバランサーHTTP/3高性能オープンソース

Webサーバー

Nginx

概要

Nginxは、非同期イベント駆動アーキテクチャを採用した高性能なWebサーバー、リバースプロキシ、ロードバランサーです。ロシアのIgor Sysoevによって開発され、C10K問題(10,000の同時接続を効率的に処理する問題)を解決するために設計されました。軽量でありながら高い処理性能を誇り、世界中の多くのWebサイトで採用されています。

詳細

Nginxは2004年に初回リリースされ、Apache HTTP Serverに代わる高性能なWebサーバーとして急速に普及しました。現在では世界のWebサーバー市場で33.8%のシェアを占め、首位を維持しています。

主要な技術的特徴

  • 非同期イベント駆動アーキテクチャ: 少ないメモリ使用量で大量の同時接続を処理
  • マスター・ワーカープロセスモデル: 安定性と効率性を両立
  • モジュラー設計: 必要な機能のみを組み込み可能
  • HTTP/3対応: 最新のHTTPプロトコルに対応し、さらなる高速化を実現

用途

  • 静的コンテンツの配信
  • リバースプロキシサーバー
  • ロードバランサー
  • APIゲートウェイ
  • マイクロサービス環境でのプロキシ

メリット・デメリット

メリット

  • 高性能: 大量の同時接続を効率的に処理
  • 軽量: 少ないメモリ使用量で動作
  • 設定が簡潔: 直感的で理解しやすい設定ファイル
  • 豊富な機能: Webサーバー、プロキシ、ロードバランサーを一つで対応
  • 高い安定性: 長時間の連続稼働に適している
  • 活発なコミュニティ: 豊富なドキュメントとサポート

デメリット

  • 動的コンテンツ処理: PHPなどの動的コンテンツは外部プロセスが必要
  • Apacheほどのモジュール豊富さは未対応: 一部の特殊機能はサードパーティモジュールが必要
  • 学習コストはある: Apache経験者でも設定方法の違いを学ぶ必要

参考ページ

書き方の例

基本的なWebサーバー設定

server {
    listen 80;
    server_name example.com;
    
    location / {
        root /var/www/html;
        index index.html index.htm;
    }
}

SSL/TLS対応HTTPS設定

server {
    listen 443 ssl;
    server_name example.com;
    
    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    
    location / {
        root /var/www/html;
        index index.html;
    }
}

リバースプロキシ設定

upstream backend {
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
    server 192.168.1.12:8080;
}

server {
    listen 80;
    server_name api.example.com;
    
    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

ロードバランシング設定

upstream web_servers {
    least_conn;
    server web1.example.com:80 weight=3;
    server web2.example.com:80 weight=2;
    server web3.example.com:80 weight=1;
}

server {
    listen 80;
    server_name loadbalancer.example.com;
    
    location / {
        proxy_pass http://web_servers;
    }
}

キャッシュ設定

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g 
                 inactive=60m use_temp_path=off;

server {
    listen 80;
    server_name cache.example.com;
    
    location / {
        proxy_cache my_cache;
        proxy_pass http://backend;
        proxy_cache_valid 200 10m;
        proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
    }
}

HTTP/2設定

server {
    listen 443 ssl http2;
    server_name example.com;
    
    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;
    
    location / {
        root /var/www/html;
    }
}