-
Nginxの概要 ============ Nginxは高パフォーマンスなWebサーバーとして設計されたオープンソースソフトウェアで、主に大規模トラフィックを扱うWebサイトに適しています。Linux、macOS、Windowsなど複数のプラットフォームに対応しており、高い安定性と低リソース消費を特徴としています。主な機能にはHTTPS通信、gzip圧縮、仮想ホスト構成、URL書き換え機能があり、FastCGIとの連携による動的コンテンツ処理や、プロキシ・リバースプロキシ・ロードバランシング機能を備えています。
-
主な機能 =============
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;
}
- 設定ファイルの構造 =============
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マッチング優先順位:
- 完全一致(
=) - 正規表現(
~/~*) - 部分一致(
^~) - 通常マッチ(
/path)
location = /exact/ {
# 完全一致
}
location ~ \.php$ {
# 正規表現(大文字区別)
}
location ^~ /images/ {
# パス前方一致
}
location /documents/ {
# 通常マッチ
}