Nginx公式ドキュメントを徹底解説:インストールから設定まで
Nginx(エンジンエックス)は、高性能で高機能なWebサーバー、リバースプロキシ、ロードバランサ、HTTPキャッシュとして広く利用されているオープンソースソフトウェアです。その柔軟性と拡張性から、小規模なウェブサイトから大規模なエンタープライズアプリケーションまで、幅広い環境で採用されています。
本記事では、Nginx公式ドキュメントの内容を基に、Nginxのインストールから基本的な設定、そして高度な設定まで、詳細な解説を行います。Nginxをこれから使い始める方から、より深く理解したい方まで、役立つ情報を提供することを目指します。
目次
- Nginxとは?
- Nginxの概要
- Nginxの主要な機能
- Nginxのアーキテクチャ
- NginxとApacheの違い
- Nginxのインストール
- 主要なOSへのインストール手順 (Ubuntu, CentOS, macOS)
- ソースコードからのコンパイルとインストール
- インストール時のオプションとモジュール
- Nginxの基本設定
- 設定ファイルの構造と構文
- 主要なディレクティブの説明 (server, listen, location, root, index, error_page)
- 基本的なWebサイトの構成
- 静的コンテンツの配信
- Nginxのリバースプロキシ
- リバースプロキシの概念と利点
- 基本的なリバースプロキシの設定
- キャッシュの設定
- ヘルスチェックの設定
- ロードバランシングの設定
- Nginxのセキュリティ設定
- SSL/TLS証明書の取得と設定
- HTTP/2の設定
- セキュリティヘッダーの設定 (HSTS, X-Frame-Options, X-Content-Type-Options)
- DoS攻撃対策
- アクセス制御
- Nginxの高度な設定
- リライトルールの設定
- gzip圧縮の設定
- ログの設定
- カスタムモジュールの利用
- 変数と条件分岐
- Nginxの監視とトラブルシューティング
- Nginxの状態監視
- ログの解析
- 一般的な問題とその解決策
- パフォーマンスチューニング
- Nginxの最新情報とコミュニティ
- Nginxの最新バージョン情報
- Nginxのコミュニティリソース
- Nginxの公式ドキュメント
- まとめ
1. Nginxとは?
1.1 Nginxの概要
Nginxは、ロシア人のプログラマーであるIgor Sysoevによって開発されたWebサーバーです。もともとはRamblerというロシアの検索エンジンで利用するために開発されました。Nginxは、その高いパフォーマンスと低いリソース消費量から、瞬く間に人気を集め、現在では世界中で最も広く利用されているWebサーバーの一つとなっています。
1.2 Nginxの主要な機能
Nginxは、単なるWebサーバーとしてだけでなく、以下のような多岐にわたる機能を提供します。
- Webサーバー: HTTP/HTTPSプロトコルを介して、静的コンテンツや動的コンテンツを配信します。
- リバースプロキシ: クライアントからのリクエストをバックエンドサーバーに転送し、その応答をクライアントに返します。
- ロードバランサ: 複数のバックエンドサーバーにリクエストを分散し、負荷を分散します。
- HTTPキャッシュ: よくアクセスされるコンテンツをキャッシュし、応答速度を向上させます。
- メールプロキシ: SMTP, POP3, IMAPプロトコルを介して、メールのプロキシ処理を行います。
- ストリーミングメディアサーバー: HLS, RTMPプロトコルを介して、ストリーミングメディアを配信します。
1.3 Nginxのアーキテクチャ
Nginxは、イベント駆動型で非同期なアーキテクチャを採用しています。これは、Apacheのようなプロセスベースのアーキテクチャとは大きく異なります。Nginxは、少数のワーカプロセスで大量の同時接続を処理することができます。
- Master Process: 設定ファイルの読み込み、ワーカプロセスの管理を行います。
- Worker Processes: 実際のリクエスト処理を行います。
- Cache Manager: キャッシュの管理を行います。
- Cache Loader: キャッシュの初期化を行います。
このアーキテクチャにより、Nginxは高いパフォーマンスと安定性を実現しています。
1.4 NginxとApacheの違い
NginxとApacheは、どちらも広く利用されているWebサーバーですが、いくつかの重要な違いがあります。
特徴 | Nginx | Apache |
---|---|---|
アーキテクチャ | イベント駆動型, 非同期 | プロセスベース, スレッドベース |
パフォーマンス | 静的コンテンツの配信に優れる | モジュールが多いとパフォーマンスが低下しやすい |
リソース消費量 | 少ない | 多い |
設定 | 複雑だが、柔軟性が高い | 比較的簡単 |
主な用途 | リバースプロキシ, ロードバランサ, 静的コンテンツ配信 | 動的コンテンツの配信 |
どちらのWebサーバーを選択するかは、それぞれの環境や要件によって異なります。一般的に、静的コンテンツの配信やリバースプロキシとして利用する場合はNginx、動的コンテンツの配信や豊富なモジュールを利用する場合はApacheが適しています。
2. Nginxのインストール
2.1 主要なOSへのインストール手順 (Ubuntu, CentOS, macOS)
- Ubuntu:
bash
sudo apt update
sudo apt install nginx
- CentOS:
bash
sudo yum update
sudo yum install nginx
sudo systemctl start nginx
sudo systemctl enable nginx
- macOS (Homebrew):
bash
brew update
brew install nginx
sudo brew services start nginx
2.2 ソースコードからのコンパイルとインストール
Nginxをソースコードからコンパイルしてインストールすることも可能です。これは、特定のモジュールを組み込んだり、カスタム設定を行ったりする場合に有効です。
- Nginxの公式ウェブサイトから最新のソースコードをダウンロードします。
- ダウンロードしたファイルを展開します。
- コンパイルに必要なパッケージをインストールします。
./configure
スクリプトを実行して、コンパイルオプションを設定します。make
コマンドを実行して、コンパイルを行います。sudo make install
コマンドを実行して、インストールを行います。
bash
wget http://nginx.org/download/nginx-1.25.3.tar.gz # 最新版に置き換えてください
tar -xzvf nginx-1.25.3.tar.gz
cd nginx-1.25.3
sudo apt-get update # Debian/Ubuntu
sudo apt-get install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev # 必要なパッケージ
./configure --prefix=/usr/local/nginx --with-http_ssl_module
make
sudo make install
./configure
のオプションは、環境に合わせて変更してください。
2.3 インストール時のオプションとモジュール
./configure
スクリプトには、様々なオプションを指定することができます。
--prefix
: インストール先のディレクトリを指定します。--with-http_ssl_module
: SSL/TLSをサポートするためのモジュールを組み込みます。--with-http_gzip_static_module
: 静的ファイルをgzip圧縮して配信するためのモジュールを組み込みます。--with-pcre
: Perl Compatible Regular Expressions (PCRE) ライブラリを組み込みます。--add-module
: サードパーティ製のモジュールを組み込みます。
Nginxには、様々なモジュールが用意されています。これらのモジュールを組み込むことで、Nginxの機能を拡張することができます。
3. Nginxの基本設定
3.1 設定ファイルの構造と構文
Nginxの設定ファイルは、テキスト形式で記述され、階層的な構造を持っています。設定ファイルは、ディレクティブと呼ばれる命令の集まりで構成されています。
- ディレクティブ: 設定を行うための命令。
- ブロック: ディレクティブをグループ化するための構造。
- コンテキスト: ディレクティブが適用される範囲。
設定ファイルの基本的な構造は以下の通りです。
“`nginx
グローバルコンテキスト
global_directive value;
http {
# HTTPコンテキスト
http_directive value;
server {
# Serverコンテキスト
listen 80;
server_name example.com;
location / {
# Locationコンテキスト
root /var/www/example.com;
index index.html index.htm;
}
}
}
“`
#
: コメントを表します。directive value;
: ディレクティブとその値を表します。{}
: ブロックを表します。
3.2 主要なディレクティブの説明 (server, listen, location, root, index, error_page)
server
: バーチャルホストを定義します。listen
: リッスンするポート番号とIPアドレスを指定します。server_name
: サーバーの名前を指定します。location
: URIに基づいてリクエストを処理する場所を指定します。root
: ファイルシステムのルートディレクトリを指定します。index
: インデックスファイルの名前を指定します。error_page
: エラーが発生した場合に表示するページを指定します。
3.3 基本的なWebサイトの構成
基本的なWebサイトの構成は、以下のようになります。
“`nginx
server {
listen 80;
server_name example.com;
root /var/www/example.com;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
“`
この設定では、ポート80でリッスンし、example.com
というサーバー名でアクセスされた場合に、/var/www/example.com
ディレクトリにあるファイルを提供します。
3.4 静的コンテンツの配信
静的コンテンツの配信は、Nginxの得意とするところです。上記の例のように、root
ディレクティブとindex
ディレクティブを設定することで、簡単に静的コンテンツを配信することができます。
4. Nginxのリバースプロキシ
4.1 リバースプロキシの概念と利点
リバースプロキシは、クライアントからのリクエストをバックエンドサーバーに転送し、その応答をクライアントに返すサーバーです。リバースプロキシを利用することで、以下のような利点があります。
- セキュリティ: バックエンドサーバーを直接公開せずに済むため、セキュリティが向上します。
- ロードバランシング: 複数のバックエンドサーバーにリクエストを分散し、負荷を分散します。
- キャッシュ: よくアクセスされるコンテンツをキャッシュし、応答速度を向上させます。
- SSL/TLS終端: SSL/TLS暗号化をリバースプロキシで終端し、バックエンドサーバーの負荷を軽減します。
4.2 基本的なリバースプロキシの設定
基本的なリバースプロキシの設定は、以下のようになります。
“`nginx
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend-server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
“`
proxy_pass
: リクエストを転送するバックエンドサーバーのURLを指定します。proxy_set_header
: リクエストヘッダーをバックエンドサーバーに転送します。
4.3 キャッシュの設定
Nginxは、HTTPキャッシュ機能を備えています。キャッシュを設定することで、応答速度を向上させることができます。
“`nginx
proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend-server;
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout invalid_header updating;
add_header X-Cache-Status $upstream_cache_status;
}
}
“`
proxy_cache_path
: キャッシュの保存場所、キーゾーン、最大サイズなどを指定します。proxy_cache
: 使用するキャッシュゾーンを指定します。proxy_cache_valid
: キャッシュの有効期限を指定します。proxy_cache_use_stale
: バックエンドサーバーが利用できない場合に、古いキャッシュを使用するかどうかを指定します。add_header X-Cache-Status
: キャッシュの状態をヘッダーに追加します。
4.4 ヘルスチェックの設定
Nginx Plusでは、ヘルスチェック機能を備えています。ヘルスチェックを設定することで、バックエンドサーバーの状態を監視し、利用できないサーバーへのリクエストを自動的に停止することができます。
“`nginx
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com down; # 初期状態ではダウンしている
server backend4.example.com max_fails=3 fail_timeout=30s; # ヘルスチェックで失敗するとダウン
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
}
}
“`
upstream
ブロック内で、down
, max_fails
, fail_timeout
ディレクティブを使用してヘルスチェックを設定します。
4.5 ロードバランシングの設定
Nginxは、複数のロードバランシングアルゴリズムをサポートしています。
- Round Robin: リクエストを順番にバックエンドサーバーに分散します。
- Least Connections: 最も接続数の少ないバックエンドサーバーにリクエストを分散します。
- IP Hash: クライアントのIPアドレスに基づいて、特定のバックエンドサーバーにリクエストを分散します。
“`nginx
upstream backend {
ip_hash; # IP Hashロードバランシング
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
}
}
“`
upstream
ブロック内で、ip_hash
ディレクティブを使用してロードバランシングアルゴリズムを指定します。
5. Nginxのセキュリティ設定
5.1 SSL/TLS証明書の取得と設定
SSL/TLS証明書を取得し、Nginxに設定することで、HTTPSによる暗号化通信を有効にすることができます。
- SSL/TLS証明書を取得します (Let’s Encryptなどが利用できます)。
- Nginxの設定ファイルにSSL/TLS証明書のパスを設定します。
“`nginx
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/certificate.crt;
ssl_certificate_key /path/to/private.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ‘EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH’;
location / {
root /var/www/example.com;
index index.html index.htm;
}
}
“`
ssl_certificate
: SSL/TLS証明書のパスを指定します。ssl_certificate_key
: 秘密鍵のパスを指定します。ssl_protocols
: 使用するSSL/TLSプロトコルを指定します。ssl_prefer_server_ciphers
: サーバーが暗号スイートを選択することを優先するかどうかを指定します。ssl_ciphers
: 使用する暗号スイートを指定します。
5.2 HTTP/2の設定
HTTP/2は、HTTP/1.1の後継となるプロトコルで、より効率的な通信を実現します。HTTP/2を有効にするには、listen
ディレクティブにhttp2
オプションを追加します。
“`nginx
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /path/to/certificate.crt;
ssl_certificate_key /path/to/private.key;
location / {
root /var/www/example.com;
index index.html index.htm;
}
}
“`
5.3 セキュリティヘッダーの設定 (HSTS, X-Frame-Options, X-Content-Type-Options)
セキュリティヘッダーを設定することで、Webサイトのセキュリティを向上させることができます。
- HSTS (HTTP Strict Transport Security): ブラウザにHTTPSのみを使用するように指示します。
- X-Frame-Options: クリックジャッキング攻撃を防ぎます。
- X-Content-Type-Options: ブラウザにMIMEタイプのスニッフィングを禁止します。
nginx
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
5.4 DoS攻撃対策
DoS攻撃 (Denial of Service attack) は、サーバーに過剰な負荷をかけ、サービスを停止させる攻撃です。Nginxには、DoS攻撃対策として、以下の機能が備わっています。
limit_req_zone
: リクエストレートを制限します。limit_conn_zone
: 同時接続数を制限します。
“`nginx
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
limit_conn_zone $binary_remote_addr zone=connlimit:10m;
server {
listen 80;
server_name example.com;
location / {
limit_req zone=mylimit burst=5 nodelay;
limit_conn connlimit 10;
root /var/www/example.com;
index index.html index.htm;
}
}
“`
limit_req_zone
: リクエストレートを制限するためのゾーンを定義します。limit_conn_zone
: 同時接続数を制限するためのゾーンを定義します。limit_req
: リクエストレートを制限します。limit_conn
: 同時接続数を制限します。
5.5 アクセス制御
Nginxには、アクセス制御を行うための機能が備わっています。
allow
: 特定のIPアドレスまたはネットワークからのアクセスを許可します。deny
: 特定のIPアドレスまたはネットワークからのアクセスを拒否します。
nginx
location / {
allow 192.168.1.0/24;
deny all;
root /var/www/example.com;
index index.html index.htm;
}
この設定では、192.168.1.0/24
ネットワークからのアクセスを許可し、それ以外のアクセスを拒否します。
6. Nginxの高度な設定
6.1 リライトルールの設定
リライトルールを設定することで、URIを書き換えることができます。リライトルールは、rewrite
ディレクティブを使用して設定します。
nginx
rewrite ^/old-page$ /new-page permanent;
この設定では、/old-page
へのアクセスを/new-page
にリダイレクトします。
6.2 gzip圧縮の設定
gzip圧縮を有効にすることで、転送量を削減し、応答速度を向上させることができます。
nginx
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss image/svg+xml;
gzip
: gzip圧縮を有効にします。gzip_disable
: 特定のブラウザに対するgzip圧縮を無効にします。gzip_vary
:Vary
ヘッダーを追加します。gzip_proxied
: プロキシ経由のリクエストに対するgzip圧縮を有効にします。gzip_comp_level
: 圧縮レベルを指定します。gzip_buffers
: バッファの数とサイズを指定します。gzip_http_version
: 使用するHTTPバージョンを指定します。gzip_types
: gzip圧縮するMIMEタイプを指定します。
6.3 ログの設定
Nginxのログは、Webサイトのトラフィックやエラーを分析するために非常に重要です。Nginxのログは、access_log
ディレクティブとerror_log
ディレクティブを使用して設定します。
nginx
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log warn;
access_log
: アクセスログのパスとフォーマットを指定します。error_log
: エラーログのパスとログレベルを指定します。
6.4 カスタムモジュールの利用
Nginxは、カスタムモジュールを組み込むことで、機能を拡張することができます。カスタムモジュールは、C言語で記述する必要があります。
6.5 変数と条件分岐
Nginxでは、変数と条件分岐を使用して、より柔軟な設定を行うことができます。
- 変数: リクエストやサーバーに関する情報を格納します。
- 条件分岐:
if
ディレクティブを使用して、条件に応じて処理を切り替えます。
nginx
if ($request_uri ~* "\.(jpg|jpeg|gif|png)$") {
expires 30d;
}
この設定では、URIが.jpg
, .jpeg
, .gif
, .png
で終わる場合に、expires
ヘッダーを設定します。
7. Nginxの監視とトラブルシューティング
7.1 Nginxの状態監視
Nginxの状態を監視することで、Webサイトのパフォーマンスや安定性を確認することができます。
nginx -t
: 設定ファイルの構文をチェックします。systemctl status nginx
: Nginxの状態を確認します。top
: システムのリソース使用状況を確認します。
7.2 ログの解析
Nginxのログを解析することで、Webサイトのトラフィックやエラーを分析することができます。
grep
: 特定の文字列を検索します。awk
: テキストを処理します。tail
: ファイルの末尾を表示します。
7.3 一般的な問題とその解決策
- 502 Bad Gateway: バックエンドサーバーが利用できない場合に発生します。バックエンドサーバーの状態を確認してください。
- 404 Not Found: ファイルが見つからない場合に発生します。
root
ディレクティブの設定を確認してください。 - 設定ファイルの構文エラー:
nginx -t
コマンドを使用して、設定ファイルの構文をチェックしてください。
7.4 パフォーマンスチューニング
Nginxのパフォーマンスをチューニングすることで、応答速度を向上させることができます。
worker_processes
: ワーカプロセスの数を設定します。worker_connections
: ワーカプロセスごとの最大接続数を設定します。- キャッシュの設定: キャッシュを有効にすることで、応答速度を向上させます。
- gzip圧縮の設定: gzip圧縮を有効にすることで、転送量を削減し、応答速度を向上させます。
8. Nginxの最新情報とコミュニティ
8.1 Nginxの最新バージョン情報
Nginxの最新バージョン情報は、Nginxの公式ウェブサイトで確認することができます。
8.2 Nginxのコミュニティリソース
Nginxには、活発なコミュニティがあります。
- Nginx公式ウェブサイト: https://nginx.org/
- Stack Overflow: https://stackoverflow.com/questions/tagged/nginx
- GitHub: https://github.com/nginx
8.3 Nginxの公式ドキュメント
Nginxの公式ドキュメントは、Nginxの機能を理解するための最も信頼できる情報源です。
9. まとめ
本記事では、Nginxのインストールから設定、そして高度な設定まで、詳細な解説を行いました。Nginxは、高性能で高機能なWebサーバーであり、Webサイトのパフォーマンスとセキュリティを向上させるために非常に役立ちます。本記事が、Nginxを使いこなすための一助となれば幸いです。
補足:
- 上記はあくまで基本的な内容であり、Nginxにはさらに多くの機能と設定オプションが存在します。
- 具体的な設定は、環境や要件によって異なります。
- Nginxの公式ドキュメントを参考に、最適な設定を行ってください。
この詳細な解説が、あなたのNginx学習の一助となることを願っています。