Nginxの基本概要と設定例

  1. Nginxの概要 ============ Nginxは高パフォーマンスなWebサーバーとして設計されたオープンソースソフトウェアで、主に大規模トラフィックを扱うWebサイトに適しています。Linux、macOS、Windowsなど複数のプラットフォームに対応しており、高い安定性と低リソース消費を特徴としています。主な機能にはHTTPS通信、gzip圧縮、仮想ホスト構成、URL書き換え機能があり、FastCGIとの連携による動的コンテンツ処理や、プロキシ・リバースプロキシ・ロードバランシング機能を備えています。

  2. 主な機能 =============

2.1 リバースプロキシとロードバランシング

  • 正規プロキシの説明

クライアントと目的サーバーの中間に位置するプロキシサーバーで、クライアントのリクエストを代理で処理します。プロキシサーバーが目的サーバーにアクセスし、取得した応答をクライアントに返します。

  • リバースプロキシの特徴

クライアントから見ると通常のWebサーバーとして動作しますが、内部で他のサーバーにリクエストを転送する仕組みを持ちます。クライアントのリクエストを受け取ると、バックエンドサーバーに転送して応答を取得します。

  • ロードバランシングの仕組み

リバースプロキシを基盤とした機能で、複数のサーバーに負荷を分散することで可用性と応答速度を向上させます。主なアルゴリズムには以下の4種類があります。

アルゴリズム 説明
ラウンドロビン デフォルトの方式。リクエストを順番にサーバーに割り当て、ダウン状態のサーバーは自動的に除外します。
重み付け方式 指定された重み比率でリクエストを分配。性能の異なるサーバー構成に適しています。
IPハッシュ アクセス元IPのハッシュ値で固定サーバーを割り当て、セッション共有の問題を解決します。
拡張モジュール fairモジュールは応答速度、url_hashモジュールはURLのハッシュ値で分配を行います。

1. ラウンドロビン方式の設定例

upstream backend_servers {
	server 192.168.0.10:8080;
	server 192.168.0.11:8080;
}

server {
	listen 80;
	server_name example.com;
	location / {
		proxy_pass http://backend_servers;
		proxy_set_header Host $host;
	}
}
2. 重み付け方式の設定例
upstream weighted_servers {
	server 192.168.0.10:8080 weight=3;
	server 192.168.0.11:8080 weight=1;
}

server {
	listen 80;
	server_name example.com;
	location / {
		proxy_pass http://weighted_servers;
		proxy_set_header Host $host;
	}
}
3. IPハッシュ方式の設定例
upstream ip_hash_servers {
	ip_hash;
	server 192.168.0.10:8080;
	server 192.168.0.11:8080;
}

server {
	listen 80;
	server_name example.com;
	location / {
		proxy_pass http://ip_hash_servers;
		proxy_set_header Host $host;
	}
}
4. 拡張モジュールの設定例
upstream dynamic_servers {
	fair;
	server 192.168.0.10:8080;
	server 192.168.0.11:8080;
}

server {
	listen 80;
	server_name example.com;
	location / {
		proxy_pass http://dynamic_servers;
		proxy_set_header Host $host;
	}
}

2.2 静的・動的コンテンツの分離

Nginxでは静的リクエストと動的リクエストを分離し、それぞれに最適なサーバーで処理する仕組みを実装できます。静的リソースはNginxで直接キャッシュし、動的リクエストはバックエンドサーバーに転送することで全体のパフォーマンスを向上させます。

upstream app_servers {
	server 192.168.1.10:8080;
	server 192.168.1.11:8080;
}

server {
	listen 80;
	server_name static.example.com;
	location /static/ {
		alias /var/www/static_content/;
		expires 30d;
	}
	
	location ~ \.(php|asp)$ {
		proxy_pass http://app_servers;
		proxy_set_header Host $host;
	}
	
	error_page 500 502 503 504 /errors/50x.html;
}
  1. 設定ファイルの構造 =============

Nginxの設定はnginx.confファイルに記述され、以下の5つのブロック構造を持ちます:

  • グローバルコンテキスト
  • eventsブロック
  • httpブロック
  • serverブロック
  • locationブロック

3.1 グローバル設定

user nginx;
worker_processes auto;

error_log /var/log/nginx/error.log notice;
pid /run/nginx.pid;

3.2 イベント設定

events {
	worker_connections 1024;
	use epoll;
	multi_accept on;
}

3.3 HTTP設定

http {
	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	log_format custom '$remote_addr - $remote_user [$time_local] "$request" '
		'$status $body_bytes_sent "$http_referer" '
		'"$http_user_agent" "$http_x_forwarded_for"';

	access_log /var/log/nginx/access.log custom;

	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;

	upstream backend {
		server 10.0.0.1:8080 weight=5;
		server 10.0.0.2:8080;
	}
}

3.4 サーバー・ロケーション設定

server {
	listen 80;
	server_name www.example.com;

	location / {
		root /usr/share/nginx/html;
		index index.html;
	}

	location ~ \.php$ {
		root /var/www/html;
		fastcgi_pass unix:/run/php-fpm.sock;
		include fastcgi_params;
	}

	location = /favicon.ico {
		log_not_found off;
		access_log off;
	}
}

locationマッチング優先順位:

  1. 完全一致(=
  2. 正規表現(~/~*
  3. 部分一致(^~
  4. 通常マッチ(/path
location = /exact/ {
	# 完全一致
}

location ~ \.php$ {
	# 正規表現(大文字区別)
}

location ^~ /images/ {
	# パス前方一致
}

location /documents/ {
	# 通常マッチ
}

タグ: nginx リバースプロキシ ロードバランシング 設定例 静的コンテンツ配信

6月20日 17:42 投稿