nginxのメイン設定ファイルはconf/nginx.confにあり、グローバルモジュール、イベントモジュール、httpモジュールの3つの部分で構成されています。nginxを使用して設定する際には、httpモジュールに最も頻繁に触れることになります。
httpブロックにはhttpグローバルブロックと複数のサーバーブロックが含まれます。
各サーバーブロックにはサーバーグローバルブロックと複数のロケーションブロックが含まれます。
グローバルモジュール
グローバルブロックは、デフォルトの構成ファイルの冒頭からイベントブロックまで含まれます。主に、Nginxサーバーの全体的な動作に影響を与えるいくつかの構成指示を設定します。したがって、これらの指示の範囲はNginxサーバー全体に適用されます。
- user [user] [group] は、nginx サービスを実行できるユーザーとグループを指定します。user ディレクティブはグローバルブロックでのみ設定できます。Windows では、特定のユーザーとグループを指定しても有効になりません。
- pid logs/nginx.pid は pid ファイルを格納します
events モジュール
イベントブロック内のディレクティブは主に、Nginxサーバーとユーザー間のネットワーク接続に影響を与えます。一般的な設定には、複数のワーカープロセスにおけるネットワーク接続のシリアライズを有効にするかどうか、複数のネットワーク接続を同時に受信することを許可するかどうか、接続リクエストの処理に使用するイベント駆動型モデル、および各ワーカープロセスが同時にサポートできる接続の最大数などがあります。
- accept_mutex はデフォルトで有効になっています。有効になっている場合、Nginx の複数のワーカーがシリアル方式で接続を処理します。ワーカーは1つだけが起動され、他のワーカーはスリープ状態を維持します。無効になっている場合、ワーカーが群れをなすような効果が起こります。すべてのワーカーが起動されますが、新しい接続を取得できるのは1つのワーカーだけです。他のワーカーはスリープモードに戻ります。
- worker_connections は単一プロセスにおける接続の最大数です。
httpモジュール
httpブロックは、Nginxサーバー構成の重要な部分です。プロキシ、キャッシュ、ログ定義などの機能やサードパーティモジュールの構成のほとんどは、このブロックに配置できます。
- includeディレクティブは、他の構成ファイルをインポートするために使用されます
sendfileは、sendfile()システムコールを有効にしてread()およびwrite()コールを置き換えるシンプルな方法であり、システムコンテキストの切り替えを減らしてパフォーマンスを向上させます。nginxが静的ファイルサーバーである場合、nginxのパフォーマンスを大幅に向上させることができます。
HTTPにはKeepAliveモードがあり、ウェブサーバーにリクエストの処理後にTCP接続を維持するよう指示します。 クライアントから別のリクエストを受信すると、サーバーは新しい接続を確立することなく、この未閉鎖の接続を使用します。
gzipを有効にすると、ウェブサイトのCSS、JS、XML、HTMLファイルが送信中に圧縮され、アクセス速度が向上し、Nginxのパフォーマンスが最適化されます。
サーバーモジュール
各 http ブロックは複数のサーバーブロックを含めることができ、各サーバーブロックは仮想ホストに相当します。複数のホストが一緒にサービスを提供することができ、それらをまとめて論理的に密接に関連するサービス群を提供することができます。
- listen ディレクティブは非常に柔軟で、単一の IP アドレス、単一のポート、またはその両方に対してリッスンするように設定できます。
listen 127.0.0.1:8000; #127からしか聴けない.0.0.1このIPは、ポート8000を要求している listen 127.0.0.1; #127からしか聴けない.0.0.1このIPは、ポート80を要求している。 listen 9999; #すべてのIPからのポート9999のリクエストをリッスンする。 listen *:9999; #上記と同じ効果である。 listen localhost:8000; #最初のものと同じ効果listen 127.0.0.1:8000; #127からしか聴けない.0.0.1このIPは、ポート8000を要求している listen 127.0.0.1; #127からしか聴けない.0.0.1このIPは、ポート80を要求している。 listen 9999; #すべてのIPからのポート9999のリクエストをリッスンする。 listen *:9999; #上記と同じ効果である。 listen localhost:8000; #最初のものと同じ効果
- server_name nginx では、1つのバーチャルホストに1つ以上の名前を指定でき、ワイルドカード「*」を使用してバーチャルホストの名前を設定することもできます。 IPドメイン名のワイルドカード正規表現などもサポートしています。
server_name localhost;server_name localhost;
location モジュール
各サーバーブロックは複数のロケーションブロックを含むことができます。 これらは Nginx 設定ファイル全体において重要な役割を果たし、Nginx サーバーの多くの機能における柔軟性は、ロケーションディレクティブの設定に反映されることがよくあります。
ロケーションディレクティブは以下の 3 つのカテゴリーに分類できます。
- プレフィックス文字列の一致
- 完全一致 =
- 修飾子なしでプレフィックスにマッチします。
- 内部リダイレクト用の名前付きロケーション
location root root locationで指定されたディレクトリの親ディレクトリを指定し、その親ディレクトリにはlocationと同じ名前のディレクトリが含まれている必要があります。
以下のように構成すると、nginxは/img/ディレクトリ内のファイルにアクセスする際に、/var/www/image/img/ディレクトリ内のファイルを探します。
location /img/ { root /var/www/image; }location /img/ { root /var/www/image; }