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