Nginx設定ファイルの詳細な説明

Nginx設定ファイルの詳細な説明

Nginx の主な設定ファイルは nginx.conf で、グローバル ブロック、イベント ブロック、http ブロックの 3 つの部分で構成されています。 http ブロックには、http グローバル ブロックと複数のサーバー ブロックも含まれます。各サーバー ブロックには、サーバー グローバル ブロックと複数のロケーション ブロックを含めることができます。同じ構成ブロック内にネストされた構成ブロック間には順序関係はありません。

構成ファイルは多数の構成可能な命令をサポートしていますが、そのほとんどは特定のブロックに固有のものではありません。異なるレベルのブロックに配置された同じ命令には、異なるスコープがあります。通常、上位レベルのブロック内の命令は、それが配置されているブロックと、このブロックに含まれるすべての下位レベルのブロックに対して作用できます。命令が異なるレベルの 2 つのブロックに同時に出現する場合は、「近接原則」が採用され、つまり、下位レベルのブロックの構成が優先されます。たとえば、ディレクティブが http グローバル ブロックとサーバー ブロックの両方に表示され、構成が異なる場合は、サーバー ブロックの構成が優先されます。

構成ファイル全体の構造は次のとおりです。

#グローバルブロック#ユーザーnobody;
ワーカープロセス 1;

#イベントブロックイベント{
 ワーカー接続 1024;
}

#http ブロック http {
 #http グローバル ブロックには mime.types が含まれます。
 デフォルトタイプ アプリケーション/オクテットストリーム;
 ファイル送信オン;
 キープアライブタイムアウト65;
 #サーバーブロックサーバー{
  #サーバーグローバルブロックリッスン8000;
  server_name ローカルホスト;
  #location ブロックの場所 / {
   ルートhtml;
   インデックス index.html index.htm;
  }
  エラーページ 500 502 503 504 /50x.html;
  場所 = /50x.html {
   ルートhtml;
  }
 }
 #ここには複数のサーバーブロックが存在する可能性があります server {
  ...
 }
}

グローバルブロック

グローバル ブロックは、デフォルト設定ファイルの先頭からイベント ブロックまでの部分です。主に、Nginx サーバーの全体的な動作に影響するいくつかの設定指示を設定します。したがって、これらの指示の範囲はグローバル Nginx サーバーです。

通常、これには、Nginx サーバーを実行するユーザー (グループ)、生成が許可されるワーカー プロセスの数、Nginx プロセス PID の保存パス、ログの保存パスとタイプ、および設定ファイルの導入の構成が含まれます。

#nginx サービスを実行できるユーザーとユーザー グループを指定します。これはグローバル ブロックでのみ設定できます。#user [user] [group]
# ユーザー ディレクティブをコメントアウトするか、nobody に設定してすべてのユーザーが実行できるようにします # user nobody nobody;
# ユーザー ディレクティブは Windows では機能しません。特定のユーザーとユーザー グループを指定すると、小さな警告が報告されます。# nginx: [warn] "user" はサポートされていません。D:\software\nginx-1.18.0/conf/nginx.conf:2 では無視されます

#ワーカー スレッドの数を指定します。特定のプロセス数を指定するか、自動モードを使用できます。このコマンドは、グローバル ブロック # worker_processes number | auto; でのみ構成できます。
# 例: 4 つのワーカー スレッドを指定します。この場合、マスター プロセスと 4 つのワーカー プロセスが生成されます。# worker_processes 4;

#pid ファイルが保存されているパスを指定します。このコマンドはグローバル ブロックでのみ設定できます。#pid logs/nginx.pid;

#エラー ログのパスとログ レベルを指定します。このディレクティブは、グローバル ブロック、http ブロック、サーバー ブロック、およびロケーション ブロックで設定できます。 (ブロック構成の違いによる違いは何でしょうか?)
# デバッグ レベル ログは、デバッグ スイッチをオンにするために --with-debug でコンパイルする必要があります。# error_log [path] [debug | info | notice | warn | error | crit | alert | emerg] 
# error_log ログ/error.log 通知;
# error_log ログ/error.log 情報;

イベントブロック

イベント ブロックに含まれる命令は、主に Nginx サーバーとユーザー間のネットワーク接続に影響します。よく使用される設定には、複数のワーカー プロセスでネットワーク接続のシリアル化を有効にするかどうか、複数のネットワーク接続を同時に受信できるようにするかどうか、接続要求を処理するために選択するイベント駆動型モデル、各ワーカー プロセスが同時にサポートできる接続の最大数などがあります。

この部分の指示は、Nginx サーバーのパフォーマンスに大きな影響を与えるため、実際の構成では実際の状況に応じて柔軟に調整する必要があります。

# ある時間にネットワーク接続が 1 つだけの場合、複数のスリープ状態のプロセスが同時に起動されますが、接続を取得できるのは 1 つのプロセスだけです。毎回起動されるプロセスが多すぎると、システム パフォーマンスの一部に影響が出ます。この問題は、マルチプロセス Nginx サーバーで発生する可能性があります。
# 有効にすると、複数の Nginx プロセスが受信した接続をシリアル化して、複数のプロセスが接続を競合するのを防ぎます。# デフォルトで有効になっており、イベント ブロックでのみ構成できます。# accept_mutex on | off;

# multi_accept が無効になっている場合、nginx ワーカー プロセスは一度に 1 つの新しい接続しか受け入れることができません。それ以外の場合、単一のワーカー プロセスがすべての新しい接続を同時に受け入れることができます。 
# nginx が kqueue 接続方法を使用する場合、この方法は受け入れを待機している新しい接続の数を報告するため、このディレクティブは無視されます。
# デフォルトはオフで、イベント ブロックでのみ構成できます # multi_accept on | off;

# 使用するネットワーク IO モデルを指定します。使用可能なメソッドは、select、poll、kqueue、epoll、rtsig、/dev/poll、eventport です。通常、オペレーティング システムは上記のモデルをすべてサポートしているわけではありません。
# イベントブロックでのみ設定可能# メソッドの使用
# epoll を使用する

# 各ワーカープロセスが同時に開くことができる接続の最大数を設定します。各ワーカープロセスが受け入れる接続数がこの値を超えると、それ以上の接続は受け入れられなくなります。 # すべてのワーカープロセスがいっぱいになると、接続はログバックに入ります。ログバックがいっぱいになると、接続は拒否されます。 # events ブロックでのみ設定できます。 # 注: この値は、システムでサポートされるファイルの最大数、または単一のプロセスでサポートされるファイルの最大数を超えることはできません。詳細については、こちらの記事を参照してください: https://cloud.tencent.com/developer/article/1114773
# ワーカー接続 1024;

http ブロック#

http ブロックは、Nginx サーバー構成の重要な部分です。プロキシ、キャッシュ、ログ定義、サードパーティ モジュールの構成など、ほとんどの機能はこのモジュールに配置できます。

前述のように、http ブロックには独自のグローバル ブロックとサーバー ブロックを含めることができ、サーバー ブロックにはさらにロケーション ブロックを含めることができます。本書では、http におけるグローバル ブロック、つまりサーバー ブロックに含まれない http ブロックの部分を表すために、「http グローバル ブロック」を使用します。

http グローバル ブロックで設定できる指示には、ファイルのインポート、MIME タイプの定義、ログのカスタマイズ、sendfile を使用してファイルを転送するかどうか、接続タイムアウト、単一接続要求の上限などがあります。

# 一般的なブラウザは、HTML、XML、GIF、Flash など、さまざまなテキスト、メディア、その他のリソースを表示できます。これらのリソースを区別するために、ブラウザは MIME タイプを使用する必要があります。つまり、MIME タイプはネットワーク リソースのメディア タイプです。 Web サーバーとして、Nginx サーバーはフロントエンドから要求されたリソース タイプを識別できる必要があります。

# include ディレクティブは、他の設定ファイルをインクルードするために使用されます。設定ファイル内のどこにでも配置できます。ただし、インクルードする設定ファイルは設定仕様に準拠している必要があることに注意してください。たとえば、インクルードする設定が worker_processes ディレクティブの設定であり、このディレクティブを http ブロックにインクルードすると、確実に機能しません。前述のように、worker_processes ディレクティブはグローバル ブロックにのみ配置できます。
# 次のコマンドには mime.types が含まれています。mime.types と ngin.cfg は同じディレクトリにあります。異なるレベルにある場合は、特定のパスを指定する必要があります。# include mime.types;

# デフォルトのタイプを設定します。このディレクティブが追加されていない場合、デフォルト値は text/plain になります。
# このディレクティブは、http ブロック、server ブロック、または location ブロックでも設定できます。
# デフォルトタイプ application/octet-stream;

# access_log 設定。このディレクティブは、http ブロック、server ブロック、または location ブロックで設定できます。 # global ブロッ​​クでは、Nginx プロセス実行時のログの保存場所とレベルを設定するために使用する errer_log ディレクティブを導入しました。ここで参照されるログは従来のものとは異なります。フロントエンドのリクエストに対する Nginx サーバーのサービス プロセスを記録するログを指します。 # access_log パス [形式 [バッファ=サイズ]]
# access_log をオフにしたい場合は、次のコマンドを使用できます # access_log off;

# log_format ディレクティブはログフォーマットを定義するために使用されます。このディレクティブは http ブロックでのみ設定できます。# log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
# 上記のログ形式を定義した後、次の形式でログを使用できます # access_log logs/access.log main;

# sendfile ファイル転送を有効または無効にします。これは、http ブロック、サーバー ブロック、または場所ブロックで設定できます。# sendfile on | off;

# sendfile の最大データ サイズを設定します。この命令は、http ブロック、server ブロック、または location ブロックで設定できます。# sendfile_max_chunk size;
# サイズの値が 0 より大きい場合、Nginx プロセスの各ワーカー プロセスが sendfile() を呼び出すたびに送信されるデータの最大量は、この値を超えることはできません (ここでは 128k なので、毎回 128k を超えることはできません)。0 に設定されている場合、制限はありません。デフォルト値は 0 です。
# 送信ファイル最大チャンク 128k;

# 接続タイムアウトを設定します。このディレクティブは、http ブロック、server ブロック、または location ブロックで設定できます。
# ユーザーとのセッション接続を確立した後、Nginx サーバーはこれらの接続を一定期間開いたままにすることができます # タイムアウト (サーバー側の接続保持時間)。デフォルト値は 75 秒です。オプションの header_timeout は、応答メッセージ ヘッダーの Keep-Alive フィールドにタイムアウトを設定します: "Keep-Alive: timeout = header_timeout"。メッセージ内のこの指示は、Mozilla または Konqueror によって認識されます。
# keepalive_timeout タイムアウト [header_timeout]
# 次の構成は、サーバーが接続を 120 秒間維持し、クライアントに送信される応答メッセージ ヘッダーの Keep-Alive フィールドのタイムアウト期間が 100 秒に設定されることを意味します。
# キープアライブタイムアウト 120秒 100秒

# 単一接続要求数の上限を設定します。このディレクティブは、http ブロック、server ブロック、または location ブロックで設定できます。
# Nginx サーバーとクライアントがセッション接続を確立すると、クライアントはこの接続を介してリクエストを送信します。 keepalive_requests ディレクティブは、ユーザーが特定の接続を通じて Nginx サーバーに送信できるリクエストの数を制限するために使用されます。デフォルトは100です
# keepalive_requests 番号;

サーバーブロック

サーバー ブロックは、「仮想ホスト」の概念と密接に関連しています。

仮想ホスティングは、仮想サーバー、ホスティング スペース、または Web スペースとも呼ばれるテクノロジーです。この技術は、インターネット サーバーのハードウェアのコストを節約するために登場しました。ここでの「ホスト」または「スペース」は、物理サーバーから拡張されます。ハードウェア システムは、サーバー クラスターまたは単一のサーバーなどに基づくことができます。仮想ホスト技術は、主に HTTP、FTP、電子メールなどの複数のサービスで使用されます。サーバーの 1 つまたはすべてのサービス コンテンツを複数のサービス ユニットに論理的に分割し、外部からは複数のサーバーとして表示することで、サーバーのハードウェア リソースを最大限に活用します。ユーザーの観点から見ると、仮想ホストはスタンドアロンのハードウェア ホストとまったく同じです。

Nginx サーバーを使用して Web サービスを提供する場合、仮想ホスト テクノロジを使用すると、実行する Web サイトごとに個別の Nginx サーバーを用意する必要がなくなり、Web サイトごとに一連の Nginx プロセスを実行する必要がなくなります。仮想ホスト テクノロジーにより、Nginx サーバーは同じサーバー上で 1 セットの Nginx プロセスのみを実行し、複数の Web サイトを実行できます。

前述のように、各 http ブロックには複数のサーバー ブロックを含めることができ、各サーバー ブロックは仮想ホストに相当します。複数のホストが共同でサービスを提供し、論理的に密接に関連したサービス (ま​​たは Web サイト) のグループを外部に提供できます。

http ブロックと同様に、サーバー ブロックにも独自のグローバル ブロックを含めることができ、複数のロケーション ブロックを含めることができます。サーバー グローバル ブロックでは、最も一般的な 2 つの構成項目は、この仮想ホストのリスナー構成と、この仮想ホストの名前または IP 構成です。

listen ディレクティブ#

サーバー ブロック内で最も重要な命令は listen 命令であり、これには 3 つの構成構文があります。このディレクティブのデフォルトの設定値は listen *:80 | *:8000 です。このディレクティブは server ブロックでのみ設定できます。

//最初のリッスンアドレス[:port] [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];

// 2 番目のリッスン ポート [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];

//3番目のタイプ(これに焦点を当てる必要はありません)
listen unix:path [default_server] [ssl] [http2 | spdy] [proxy_protocol] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
listen 命令の構成は非常に柔軟です。IP アドレス、ポート、または IP アドレスとポートの両方を指定できます。

listen 127.0.0.1:8000; #IP 127.0.0.1 およびポート 8000 からのリクエストのみを listen します。 listen 127.0.0.1; #IP 127.0.0.1 およびポート 80 からのリクエストのみを listen します (ポートを指定しないでください。デフォルトは 80 です)
listen 8000; #ポート8000​​へのすべてのIPからのリクエストをリッスンする listen *:8000; #上記と同じ listen localhost:8000; #最初の効果と同じ

重要なパラメータは次のとおりです。

  • address: リッスンする IP アドレス (要求元の IP アドレス)。IPv6 アドレスの場合は、[fe80::1] のように角括弧 "[]" で囲む必要があります。
  • port: ポート番号。IP アドレスのみが定義され、ポート番号が定義されていない場合は、ポート 80 が使用されます。注意: listen ディレクティブをまったく設定しない場合、nginx がスーパーユーザー権限で実行されているときは *:80 を使用し、そうでない場合は *:8000 を使用します。複数の仮想ホストが同時に同じポートをリッスンできますが、server_name は異なるポートに設定する必要があります。
  • default_server: 対応する仮想ホストがホストを通じて一致しない場合は、この仮想ホストを通じて処理されます。詳細については、こちらの記事が分かりやすく書かれているので、ご参照ください。
  • backlog=number: listen 関数 listen() が同時に中断状態にすることを許可するネットワーク接続の最大数を設定します。デフォルトは FreeBSD では -1、他のプラットフォームでは 511 です。
  • accept_filter=filter は、リクエストをフィルタリングするためのリスニング ポートを設定します。フィルタリングされたコンテンツは受信および処理できません。このコマンドは、FreeBSD および NetBSD 5.0 以降のプラットフォームでのみ有効です。フィルターは dataready または httpready に設定できます。興味のある読者は、Nginx の公式ドキュメントを参照してください。
  • bind: 識別子、このアドレス:ポートを処理するには別の bind() を使用します。通常、同じポートで IP アドレスが異なる複数の接続の場合、Nginx サーバーは 1 つのリスニング コマンドのみを使用し、bind() を使用して同じポートのすべての接続を処理します。
  • ssl: 識別子。セッション接続を SSL モードで使用するように設定します。この識別子は、Nginx サーバーが提供する HTTPS サービスに関連しています。

listen コマンドの使用は複雑に思えますが、実際には一般的な使用では比較的単純であり、あまり複雑な設定は必要ありません。

server_name ディレクティブ

仮想ホストを構成するために使用される名前。構文は次のとおりです。

構文: server_name name ...;
デフォルト: 
サーバー名 "";
コンテキスト: サーバー

名前には、1 つの名前のみを指定することも、スペースで区切って複数の名前を並列に指定することもできます。各名前はドメイン名であり、ピリオド「.」で区切られた 2 つまたは 3 つのセグメントで構成されます。例えば

サーバー名 myserver.com www.myserver.com

この例では、この仮想ホストの名前は myserver.com または www.myserver.com に設定されています。 Nginx サーバーは、この仮想ホストのプライマリ名として最初の名前を指定します。

ワイルドカード「*」は名前で使用できますが、ワイルドカードは、3 つの文字列で構成される名前の最初または最後のセグメント、または 2 つの文字列で構成される名前の最後のセグメントでのみ使用できます。次に例を示します。

サーバー名 myserver.* *.myserver.com

さらに、name は正規表現もサポートします。ここでは詳細には触れません。

server_name ディレクティブは、ワイルドカードと正規表現を使用した名前の設定の 2 つの方法をサポートしているため、複数の仮想ホストを含​​む設定ファイルでは、名前が複数の仮想ホストの server_name によって正常に一致する可能性があります。では、どの仮想ホストがこの名前からのリクエストを処理すればよいでしょうか? Nginx サーバーは、次の規定を行います。

a. さまざまなマッチング方法では、次の優先順位に従って仮想ホストが選択され、先頭のリクエストが最初に処理されます。

① server_nameを正確に一致させる
② ワイルドカードが先頭のserver_nameに一致しました ③ ワイルドカードが末尾のserver_nameに一致しました ④ 正規表現がserver_nameに一致しました

b. 上記の 4 つのマッチング方法では、server_name が同じ優先度のマッチング方法で複数回正常にマッチングされた場合、最初に正常にマッチングした仮想ホストがリクエストを処理します。

場合によっては、IP アドレスに基づいて仮想ホスト構成を使用したいことがあります。たとえば、192.168.1.31 へのアクセスは仮想ホスト 1 によって処理され、192.168.1.32 へのアクセスは仮想ホスト 2 によって処理されます。

この時点で、まずエイリアスをネットワーク カードにバインドする必要があります。たとえば、以前ネットワーク カードにバインドされていた IP は 192.168.1.30 です。ここで、IP 192.168.1.31 と 192.168.1.32 の両方をこのネットワーク カードにバインドすると、これら 2 つの IP への要求がこのマシンに届くようになります。

エイリアスをバインドした後、次の構成を実行します。

http
{
 {
 聞く:80;
 サーバー名: 192.168.1.31;
  ...
 }
 {
 聞く:80;
 サーバー名: 192.168.1.32;
  ...
 }
}

ロケーションブロック

各サーバー ブロックには複数のロケーション ブロックを含めることができます。これは Nginx 構成ドキュメント全体において重要な役割を果たしており、多くの機能における Nginx サーバーの柔軟性は、location ディレクティブの構成に反映されることが多いです。

location ブロックの主な機能は、Nginx サーバーが受信したリクエスト文字列 (たとえば、server_name/uri-string) に基づいて、仮想ホスト名 (IP エイリアスにすることもできます。詳細は後述します) 以外の文字列 (前の例の "/uri-string" 部分) を照合し、特定のリクエストを処理することです。アドレス方向、データ キャッシュ、応答制御などの機能はすべてこの部分に実装されています。多くのサードパーティ モジュールも、ロケーション ブロックで機能を提供します。

公式の Nginx ドキュメントで定義されている location の文法構造は次のとおりです。

場所 [ = | ~ | ~* | ^~ ] uri { ... }

uri 変数は、一致させるリクエスト文字列です。/myserver.php などの正規表現のない文字列、または .php$ (.php で終わる URL を示す) などの正規表現を含む文字列になります。以下の説明の便宜上、正規表現のない URI を「標準 URI」と呼び、正規表現を使用する URI を「通常の URI」と呼ぶことにします。

角括弧内の部分はオプションであり、リクエスト文字列が URI と一致する方法を変更するために使用されます。 4 つのフラグの意味を紹介する前に、このオプションが追加されていない場合に、Nginx サーバーがサーバー ブロック内のロケーション ブロックの URI を検索して使用し、リクエスト文字列と一致させる方法を理解する必要があります。

このオプションが追加されていない場合、Nginx サーバーは最初にサーバー ブロック内の複数のロケーション ブロックを検索し、標準 URI とリクエスト文字列が一致するかどうかを確認します。複数の一致がある場合は、最も一致度の高いものが記録されます。次に、サーバーはリクエスト文字列をロケーション ブロック内の通常の URI と照合します。最初の通常の URI が正常に一致すると、検索は終了し、ロケーション ブロックを使用してリクエストが処理されます。通常の一致がすべて失敗した場合は、記録された最も高い一致を持つロケーション ブロックを使用してリクエストが処理されます。

上記の内容がわかれば、オプションの各フラグの意味を説明できます。

  • 「=」は標準 URI の前に使用され、リクエスト文字列が URI と厳密に一致する必要があります。一致が見つかった場合は、検索を停止し、リクエストを直ちに処理します。
  • 「^~」は標準 URI の前に使用され、Nginx サーバーは、ロケーション ブロック内の通常の URI を使用してリクエスト文字列を照合する代わりに、識別子 URI とリクエスト文字列の一致度が最も高い場所を見つけ、その場所をすぐに使用してリクエストを処理する必要があります。
  • 「~」は、URI に正規表現が含まれており、大文字と小文字が区別されることを示すために使用されます。
  • 「~*」は、URI に正規表現が含まれており、大文字と小文字が区別されないことを示すために使用されます。 URI に正規表現が含まれている場合は、「~」または「~*」記号を使用する必要があることに注意してください。

ブラウザが URI を送信すると、スペースが「%20」にエンコードされ、疑問符が「%3f」にエンコードされるなど、一部の文字が URL エンコードされることがわかっています。 「~」の特徴の一つは、これらの記号をURIにエンコードすることです。たとえば、ロケーション ブロックで受信した URI が「/html/%20/data」の場合、Nginx サーバーが「~ /html/ /data」として設定された場所を検索すると、正常に一致します。

ルートディレクティブ#

このディレクティブは、リソースを要求するためのルート ディレクトリを設定するために使用されます。このディレクティブは、http ブロック、server ブロック、または location ブロックで設定できます。 Nginx サーバーを使用する場合、ほとんどの場合、異なるリクエストを個別に処理するために複数のロケーション ブロックを構成する必要があるため、この指示は通常、ロケーション ブロックに設定されます。

ルートパス

パス変数には、$document_root と $realpath_root を除いて、Nginx サーバーによって事前に設定されたほとんどの変数を含めることができます。

alisa ディレクティブ#
インデックスディレクティブ#
error_page ディレクティブ#

いくつかの注意点#

上記では、Nginx のグローバル ブロック、イベント ブロック、http ブロックの構成手順をいくつか示しましたが、Nginx の手順はこれらよりもはるかに多くあります。実際、ここでの主な目的は、設定ファイル全体の構造を説明することです。コマンドとモジュールのより完全な紹介をご覧になりたい場合は、Nginx の公式 Web サイトにアクセスすることをお勧めします。

設定ファイルの例#

######Nginx 設定ファイル nginx.conf の中国語での詳細な説明######

#Nginx がユーザー www www として実行するユーザーとユーザー グループを定義します。

#nginx プロセスの数。CPU コアの合計数と同じに設定することをお勧めします。
ワーカープロセス数 8;
 
#グローバル エラー ログ定義タイプ、[debug | info | notice | warn | error | crit]
error_log /usr/local/nginx/logs/error.log 情報;

#プロセス pid ファイル pid /usr/local/nginx/logs/nginx.pid;

#プロセスが開くことができるディスクリプタの最大数を指定します: #動作モードと接続数の上限 #この命令は、nginx プロセスによって開かれるファイル ディスクリプタの最大数を指します。理論値は、開いているファイルの最大数 (ulimit -n) を nginx プロセスの数で割った値になるはずですが、nginx はリクエストを均等に分散しないため、ulimit -n の値と一致させるのが最適です。
#現在、Linux 2.6 カーネルでは、開いているファイルの数は 65535 であり、worker_rlimit_nofile にはそれに応じて 65535 が入力される必要があります。
#これは、nginx がスケジューリング中にリクエストをプロセスに均等に割り当てないからです。そのため、10240 を入力すると、合計同時実行数が 30,000 ~ 40,000 に達したときにプロセスが 10240 を超える可能性があり、502 エラーが返されます。
ワーカー_rlimit_nofile 65535;


イベント
{
 #イベント モデルを参照するには、[ kqueue | rtsig | epoll | /dev/poll | select | poll ] を使用します。epoll モデル #は、Linux カーネル バージョン 2.6 以降の高性能ネットワーク I/O モデルです。Linux では epoll が推奨されています。FreeBSD で実行している場合は、kqueue モデルを使用します。
 #補足説明:
 #Apache と同様に、nginx には異なるオペレーティング システムごとに異なるイベント モデルがあります。#A) 標準イベント モデル #Select と poll は標準イベント モデルに属します。現在のシステムでより効果的な方法がない場合、nginx は select または poll を選択します。
 #B) 効率的なイベント モデル #Kqueue: FreeBSD 4.1+、OpenBSD 2.9+、NetBSD 2.0、MacOS X で使用されます。デュアル プロセッサを搭載した MacOS X システムで kqueue を使用すると、カーネル パニックが発生する可能性があります。
 #Epoll: Linux カーネル バージョン 2.6 以降のシステムで使用されます。
 #/dev/poll: Solaris 7 11/99+、HP/UX 11.22+ (eventport)、IRIX 6.5.15+、Tru64 UNIX 5.1A+ で使用されます。
 #Eventport: Solaris 10 で使用されます。 カーネルクラッシュを防ぐには、セキュリティパッチをインストールする必要があります。
 epoll を使用します。

 # 単一プロセスの最大接続数 (最大接続数 = 接続数 * プロセス数)
 #ハードウェアに合わせて調整し、前の作業プロセスと併用します。 可能な限り大きくしますが、CPU を 100% まで稼働させないでください。各プロセスに許可される最大接続数。理論上、各 nginx サーバーの最大接続数は次のとおりです。
 ワーカー接続 65535;

 #keepalive タイムアウト。
 キープアライブタイムアウト60;

 #クライアント要求ヘッダーのバッファ サイズ。これは、システムのページング サイズに応じて設定できます。通常、リクエスト ヘッダーのサイズは 1k を超えません。ただし、システムのページングは​​通常 1k より大きいため、ここではページング サイズに設定されます。
 #ページング サイズは、getconf PAGESIZE コマンドを使用して取得できます。
 #[root@web001 ~]# getconf ページサイズ
 #4096
 #ただし、client_header_buffer_size が 4k を超える場合もありますが、client_header_buffer_size の値は「システム ページング サイズ」の整数倍に設定する必要があります。
 クライアント_ヘッダー_バッファ_サイズ 4k;

 #これは開いているファイルのキャッシュを指定します。デフォルトでは有効になっていません。max はキャッシュの数を指定します。開いているファイルの数と一致させることをお勧めします。inactive は、ファイルが要求されない場合にキャッシュが削除されるまでの時間を指します。
 open_file_cache 最大=65535 非アクティブ=60秒;

 #これは、キャッシュされた有効な情報をどのくらいの頻度でチェックするかを示します。
 #構文: open_file_cache_valid time デフォルト値: open_file_cache_valid 60 使用されるフィールド: http、server、location このディレクティブは、open_file_cache 内のキャッシュ項目の有効性情報をいつチェックするかを指定します。
 open_file_cache_valid 80秒;

 #open_file_cache ディレクティブの非アクティブ パラメータ時間内にファイルが使用される最小回数。この数を超えると、ファイル記述子は常にキャッシュ内で開かれます。上記の例のように、非アクティブ時間内にファイルが一度も使用されない場合は、そのファイルは削除されます。
 #構文: open_file_cache_min_uses number デフォルト値: open_file_cache_min_uses 1 使用場所: http、server、location このディレクティブは、open_file_cache ディレクティブのパラメータで、特定の時間範囲内で使用できるファイルの最小数を指定します。 より大きな値を使用すると、ファイル記述子は常にキャッシュ内で開かれます。
 オープンファイルキャッシュの最小使用数は 1 です。
 
 #構文: open_file_cache_errors on | off デフォルト値: open_file_cache_errors off 使用されるフィールド: http、server、location このディレクティブは、ファイルを検索するときにキャッシュ エラーをログに記録するかどうかを指定します。
 open_file_cache_errors がオン;
}
 
 
 
#httpサーバーを設定し、そのリバースプロキシ機能を使用してhttpの負荷分散サポートを提供します
{
 #ファイル拡張子とファイルタイプのマッピングテーブルには mime.types が含まれます。

 #デフォルトのファイルタイプ default_type application/octet-stream;

 #デフォルトのエンコーディング #charset utf-8;

 #サーバー名ハッシュ テーブルのサイズ#サーバー名を格納するハッシュ テーブルは、server_names_hash_max_size および server_names_hash_bucket_size ディレクティブによって制御されます。パラメータ ハッシュ バケット サイズは常にハッシュ テーブルのサイズと等しく、プロセッサ キャッシュ サイズの倍数になります。メモリへのアクセス回数を減らすことで、プロセッサ内でのハッシュテーブルのキー値の検索を高速化することができます。ハッシュ バケット サイズがプロセッサ キャッシュのサイズと等しい場合、キーを検索するときにメモリ検索の回数が最悪の場合 2 回になります。 1 回目はストレージ ユニットのアドレスを決定し、2 回目はストレージ ユニット内のキー値を検索します。したがって、Nginx がハッシュ最大サイズまたはハッシュ バケット サイズを増やす必要があるというヒントを与えた場合、最初に行うべきことは前者のパラメータのサイズを増やすことです。
 サーバー名ハッシュバケットサイズ 128;

 #クライアント要求ヘッダーのバッファ サイズ。これは、システムのページング サイズに応じて設定できます。通常、リクエストのヘッダー サイズは 1k を超えません。ただし、システムのページングは​​通常 1k より大きいため、ここではページング サイズに設定されます。ページング サイズは、getconf PAGESIZE コマンドを使用して取得できます。
 クライアント_ヘッダー_バッファ_サイズ 32k;

 #クライアント要求ヘッダー バッファ サイズ。デフォルトでは、nginx は client_header_buffer_size バッファを使用してヘッダー値を読み取ります。ヘッダーが大きすぎる場合は、large_client_header_buffers を使用して読み取ります。
 ラージクライアントヘッダーバッファ 4 64k;

 #nginx 経由でアップロードされるファイルのサイズを設定します client_max_body_size 8m;

 #効率的なファイル転送モードをオンにします。sendfile ディレクティブは、nginx がファイルを出力するときに sendfile 関数を呼び出すかどうかを指定します。一般的なアプリケーションでは、オンに設定されています。ダウンロードやディスク IO 負荷の大きいその他のアプリケーションで使用する場合は、オフに設定して、ディスクとネットワークの I/O 処理速度のバランスを取り、システム負荷を軽減できます。注意: 画像が正しく表示されない場合は、これをオフに変更してください。
 #sendfile ディレクティブは、nginx がファイルを出力するときに sendfile 関数 (ゼロ コピー モード) を呼び出すかどうかを指定します。通常のアプリケーションでは、オンに設定する必要があります。ダウンロードなどのディスク IO 負荷の高いアプリケーションに使用する場合は、オフに設定してディスクとネットワーク IO の処理速度のバランスを取り、システムの稼働時間を短縮できます。
 ファイル送信オン;

 # ディレクトリ リスト アクセスを有効にします。ダウンロード サーバーに適していますが、デフォルトでは閉じられています。
 自動インデックスオン;

 #このオプションは、socke の TCP_CORK オプションの使用を許可または禁止します。このオプションは、sendfile が tcp_nopush がオンのときのみ使用されます。
  
 tcp_nodelay オン;

 #長い接続タイムアウト(秒単位) keepalive_timeout 120;

 #FastCGI 関連のパラメータは、Web サイトのパフォーマンスを向上させるために設計されており、リソースの使用量を削減し、アクセス速度を向上させます。以下のパラメータは文字通りに理解できます。
 fastcgi_connect_timeout 300;
 fastcgi_send_timeout 300;
 fastcgi_read_timeout 300;
 fastcgi_buffer_size 64k;
 fastcgi_buffers 4 64k;
 fastcgi_busy_buffers_size 128k;
 fastcgi_temp_file_write_size 128k;

 #gzip モジュール設定 gzip on; #gzip 圧縮出力を有効にする gzip_min_length 1k; #最小圧縮ファイルサイズ gzip_buffers 4 16k; #圧縮バッファ gzip_http_version 1.0; #圧縮バージョン (デフォルト 1.1、フロントエンドが squid2.5 の場合は 1.0 を使用してください)
 GZIP_COMP_LEVER 2;
 gzip_vary オン;

 #IP接続の数を制限できるようにすると、#limit_zone crawler $ binary_remote_addr 10mを使用する必要があります。

 

 #loadバランス構成上流jh.w3cschool.cn {
  
  #UpStreamロードバランシング、重量は重量であり、マシンの構成に従って定義できます。重量パラメーターは重みを表します。
  サーバー192.168.80.121:80重量= 3;
  サーバー192.168.80.122:80重量= 2;
  サーバー192.168.80.123:80重量= 3;

  #nginx upstreamは現在、4つの割り当て#1、ポーリング(デフォルト)をサポートしています
  #EACHリクエストは、バックエンドサーバーがダウンしている場合、別のバックエンドサーバーに割り当てられます。
  #2。重量
  #ポーリングの確率を指定します。
  #例えば:
  #upstream bakend
  #サーバー192.168.0.14重量= 10;
  #サーバー192.168.0.15重量= 10;
  #}
  #2、ip_hash
  #Each要求は、アクセスIPのハッシュ結果に従って割り当てられるため、各訪問者はセッションの問題を解決できる固定バックエンドサーバーにアクセスします。
  #例えば:
  #upstream bakend
  #ip_ハッシュ;
  #サーバー192.168.0.14:88;
  #サーバー192.168.0.15:80;
  #}
  #3。
  #バックエンドサーバーの応答時間に基づいてリクエストを変更し、応答時間が短いリクエストを優先します。
  #upstream backend {
  #server server1;
  #serverServer2;
  # 公平;
  #}
  #4 url​​_hash(サードパーティ)
  #Distributeは、アクセスされたURLのハッシュ結果に従って、各URLが同じバックエンドサーバーに向けられます。
  #example:上流のハッシュステートメントを追加します。
  #サーバーSquid1:3128;
  #サーバーSquid2:3128;
  #hash $ request_uri;
  #hash_method crc32;
  #}

  #tips:
  #upstream bakend {#define load balancingデバイスのIPおよびデバイスステータス} {
  #ip_ハッシュ;
  #サーバー127.0.0.1:9090 Down;
  #サーバー127.0.0.1:8080重量= 2;
  #サーバー127.0.0.1:6060;
  #サーバー127.0.0.1:7070バックアップ;
  #}
  #Add Proxy_Pass http:// bakend/load balancingを使用する必要があるサーバーへ。

  #各デバイスのステータスは次のように設定されています。
  #1。注文の前のサーバーが一時的に負荷に関与していないことを意味します。
  #3.max_fails:許可された要求障害のデフォルト数は1です。最大数を超えると、proxy_next_upstreamモジュールによって定義されたエラーが返されます。
  #5.Backup:他のすべての非バックアップマシンがダウンまたはビジーの場合は、バックアップマシンをリクエストします。したがって、このマシンは最も軽い圧力になります。

  #nginxは、異なるサーバーで使用するために複数のグループの負荷分散を同時にセットアップすることをサポートします。
  #client_body_in_file_onlyは、クライアントが投稿したデータをデバッグ用ファイルに記録するように設定されています
  #client_body_pathは、最大3つのディレクトリを設定できます。
  
  
  
 #virtualホスト構成サーバー
 {
  #Listenポートリッスン80;

  #あなたは、スペースServer_name www.w3cschool.cn w3cschool.cnによって区切られた複数のドメイン名を持つことができます。
  インデックス index.html index.htm index.php;
  root/data/www/w3cschool;

  #****** location〜。*。(php | php5)?$ for ******
  {
   127.0.0.1:9000; をデフォルトとして設定します。
   fastcgi_index インデックス.php;
   fastcgi.conf をインクルードします。
  }
   
  #imageキャッシュ時間設定場所〜。*。(gif | jpg | jpeg | png | bmp | swf)$
  {
   有効期限は10日です。
  }
   
  #JSおよびCSSキャッシュ時間設定場所〜。*。(js | css)?$
  {
   1時間で期限切れになります。
  }
   
  #logフォーマット設定#$ remote_addrおよび$ http_x_forwarded_forは、クライアントのIPアドレスを記録するために使用されます。
  #$ remote_user:クライアントユーザー名を録画するために使用されます。
  #$ time_local:アクセス時間とタイムゾーンを記録するために使用されます。
  #$ request:要求されたURLおよびHTTPプロトコルを記録するために使用されます。
  #$ステータス:リクエストステータスを記録するために使用されます。
  #$ body_bytes_sent:クライアントに送信されたファイル本文のサイズを記録します。
  #$ http_referer:訪問が来たページリンクを記録するために使用されます。
  #$ http_user_agent:クライアントブラウザーの関連情報を記録します。
  #本来、Webサーバーは逆プロキシの後ろに配置されるため、$ remote_Addを介して取得したIPアドレスは逆プロキシサーバーのIPアドレスを取得できません。 Reverse Proxy Serverは、元のクライアントのIPアドレスと元のクライアントが要求したサーバーアドレスを記録するために、転送された要求のHTTPヘッダー情報にX_ForwardEd_for情報を追加できます。
  log_formatアクセス '$ remote_addr -$ remote_user [$ time_local] "$ request"'
  '$status $body_bytes_sent "$http_referer" '
  '"$ http_user_agent" $ http_x_forwarded_for';
   
  #この仮想ホストAccess_log /usr/local/nginx/logs/host.access.log mainのアクセスログを定義します。
  Access_log /usr/local/nginx/logs/host.access.404.log log404;
   
  # " /" location / {の逆プロキシを有効にします
   proxy_pass http://127.0.0.1:88;
   proxy_redirect オフ;
   proxy_set_header X-Real-IP $remote_addr;
    
   #バックエンドWebサーバーはX-Forwarded-Forを通じてユーザーの実際のIPを取得できる
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
   #以下はオプションのリバース プロキシ構成です。
   proxy_set_header ホスト $host;

   #クライアントclient_max_body_size 10m;

   #クライアントリクエスト用のバッファプロキシバッファーが最大バイト数、
   #256kなどの比較的大きな値に設定した場合、FirefoxまたはIEブラウザを使用して256k未満の画像を送信する場合は、正常になります。このディレクティブにコメントし、デフォルトのclient_body_buffer_size設定を使用すると、オペレーティングシステムの2倍の8kまたは16kである場合、問題が発生します。
   #Firefox 4.0またはIE 8.0を使用して、約200kの比較的大きな画像を送信すると、500内のサーバーエラーが返されます。

   #は、400以上のHTTP応答コードを使用してNginxブロック応答を行うことを意味します。
   proxy_intercept_errors がオン;

   #timeout backend server connection_initiateハンドシェイクと応答タイムアウト時間を待ちます
   プロキシ接続タイムアウト 90;

   #バックエンドサーバーデータ戻り時間(プロキシ送信タイムアウト)
   #バックエンドサーバーのデータ戻り時間_は、バックエンドサーバーが指定された時間内にすべてのデータを送信する必要があることを意味します。

   #接続が成功した後、バックエンドサーバーの応答時間(プロキシ受信タイムアウト)
   #接続が成功した後、バックエンドserver_in factの応答時間を待っているので、処理を待つためにバックエンドのキューに入りました(バックエンドサーバーがリクエストを処理する時期と言えます)
   プロキシ読み取りタイムアウト 90;

   #プロキシサーバー(NGINX)のバッファサイズをセットして、ユーザーヘッダー情報を保存します。通常、プロキシサーバーから読み取ります。

   #Proxy_Buffersバッファー、32K未満の平均的なWebページの設定返信に使用されるバッファーのサイズ(プロキシサーバーから)もページングサイズです。
   プロキシバッファ 4 32k;

   #buffer high load(proxy_buffers*2)の下
   proxy_busy_buffers_size 64k;

   #プロキシ_temp_pathを作成するときにデータのサイズをセットして、この値よりも大きい場合は、キャッシュフォルダーサイズを渡すときにワーカーがブロックしすぎないようにします。Proxy_temp_file_write_size64kはアップストリームサーバーから渡されます。
  }
   
   
  #アドレスをセットしてnginxステータスの場所 /nginxstatusを表示する{
   stub_status オン;
   access_log on;
   auth_basic "nginxstatus";
   auth_basic_user_file confpasswd;
   #HTPASSWDファイルのコンテンツは、Apacheが提供するHTPASSWDツールを使用して生成できます。
  }
   
  #local dynamic and static separation Reverse Proxy構成
   proxy_set_header ホスト $host;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   プロキシパス http://127.0.0.1:8080;
  }
   
  #すべての静的ファイルは、Tomcatや樹脂を通過せずにNginxによって直接読み取られます
  場所〜。*。(htm | html | gif | jpg | jpeg | png | bmp | swf | ioc | rar | zip | txt | flv | mid | doc | ppt |
  pdf | xls | mp3 | wma)$
  {
   有効期限は15d; 
  }
   
  場所〜。*。(js | css)?$
  {
   1時間で期限切れになります。
  }
 }
}
####### Nginx構成ファイルnginx.conf in中国語の詳細な説明######

#を参照してください

「Nginx高性能Webサーバーの詳細な説明」Miaoze Electronics Industrial Publishing House
Nginxの公式Webサイトオペレーティングシステムは、何百万もの接続をサポートできますか?
Nginxシリーズブログ
NGINXのDefault_Server定義と一致するルール
W3C NGINXチュートリアル

これは、nginx構成ファイルの詳細な説明に関するこの記事の最後です。

以下もご興味があるかもしれません:
  • nginx 設定ファイル nginx.conf に関する中国語のコメント
  • nginxでPHPフレームワークを実行するための構成ファイルの共有
  • nginxリバースプロキシサービスは、設定ファイルのエラーによりリソースにアクセスするときに404エラーを引き起こします。
  • nginx 設定ファイルの中国語での詳細な説明
  • Nginx 設定ファイル nginx.conf の一般的な設定方法
  • Nginx 設定ファイル nginx.conf の詳細な説明
  • Nginx サーバー構成ファイルの完全な分析
  • Windows での Nginx 設定と設定ファイルの概要
  • NGINX+PHP-FPM構成ファイルの組織構造の紹介
  • Nginxサーバーのnginx.conf設定ファイルの詳細な説明
  • Nginx 設定ファイル (nginx.conf) 設定の詳細 (概要)

<<:  MySQL 8.0.21 の最新バージョンのダウンロード、インストール、設定に関する詳細なチュートリアル

>>:  MySQL Installer 8.0.21 インストール チュートリアル (画像とテキスト付き)

推薦する

MySQL はどのようにしてマルチバージョンの同時実行性を実現するのでしょうか?

目次MySQL マルチバージョン同時実行1. マルチバージョン同時実行制御1. 一貫した読み取り2....

Vue の動的メニュー、動的ルートの読み込みと更新の落とし穴

目次必要:アイデア:レッスン:テキストを共有する:要約する必要:インターフェイスからサブメニュー デ...

MySQL での挿入効率のいくつかの例の比較

序文最近、仕事の都合で、約 1000w の大量のデータを MySQL に挿入する必要があり、時間がか...

さまざまなSQL結合を簡単に学ぶ

SQL JOIN 句は、テーブル間の共通フィールドに基づいて 2 つ以上のテーブルの行を結合するため...

MySQL 高可用性クラスタの展開とフェイルオーバーの実装

目次1. 内閣府1. コンセプト2. MHAの構成3. MHAの特徴2. MySQL+MHAをビルド...

MySQLデータベースでゼロ値を含む日付の問題について簡単に説明します

デフォルトでは、MySQL は日付に 0 値を挿入することを受け入れますが、実際には日付の 0 値に...

xshell を使用して VMware で Linux に接続する方法 (2 つの方法)

【序文】最近、ITOO の試験システムのストレステストを行いたいので、自分のコンピュータに Lin...

React Router 5.1.0 はページジャンプナビゲーションを実装するために useHistory を使用します

目次1. withRouterコンポーネントを使用する2. ルートタグを使用するReactRoute...

Node.jsを使用してホットリロードページを実装する方法の詳細な説明

序文少し前に、browser-sync+gulp+gulp-nodemon を組み合わせて、本番環境...

Ubuntu サーバーで MySQL を設定し、リモート接続を実装する方法

サーバー: Ubuntu Server 16.04 LSSクライアント: Ubuntu 16.04 ...

Linux システムに Spring Boot アプリケーションをインストールするための詳細なチュートリアル

Unix/Linux サービスsystemd サービス操作プロセス1. JDKがインストールされたC...

MySQL 8.0の新機能、隠しフィールドの詳細な説明

序文MySQL バージョン 8.0.23 では、新しい機能「Invisible Column (In...

MySQL の遅いクエリの落とし穴

目次1. 遅いクエリ構成1-1. スロークエリを有効にする2. 遅いクエリSQLの分析を説明する3....

MySQL 結合テーブルと ID 自動増分の例の分析

結合の書き方左結合を使用する場合、左側のテーブルが必ず駆動テーブルになりますか? 2 つのテーブルの...

JavaScript axiosのインストールとパッケージ化のケースの詳細な説明

1. axiosプラグインをダウンロードする cnpm インストール axios -S 2. mai...