ホームページ >運用・保守 >Nginx >Nginxリバースプロキシサーバーの接続制限とリクエストキューの調整方法

Nginxリバースプロキシサーバーの接続制限とリクエストキューの調整方法

PHPz
PHPzオリジナル
2023-08-08 10:37:452634ブラウズ

Nginxリバースプロキシサーバーの接続制限とリクエストキューの調整方法

Nginx リバース プロキシ サーバーの接続制限とリクエスト キューの調整方法

高同時実行ネットワーク アプリケーションを実行する場合、Nginx リバース プロキシ サーバーは非常に一般的で信頼性の高いオプションです。ただし、接続制限とリクエスト キューが適切に構成されていない場合、サーバーでパフォーマンスのボトルネックやサービス拒否の問題が発生する可能性があります。この記事では、Nginxを使用して接続数を制限し、リクエストキューを最適化する方法を紹介します。

接続数を制限する

Nginx は、worker_connections パラメーターを設定することで接続数を制限できます。このパラメータは、各ワーカー プロセスが同時に処理できる接続の最大数を指定します。接続数がこの制限に達すると、新しい接続は拒否されます。

Nginx 構成ファイルを開き、http ブロックを見つけて、次の行を追加または変更します:

http {
  ...
  worker_processes  auto;
  worker_connections  1024;
  ...
}

上記の例では、worker_connections が 1024 に設定されています。これは、各ワーカー プロセスが 1024 を処理できることを意味します。同時に接続します。サーバーのハードウェアのパフォーマンスとアプリケーションの要件に応じて、実際の条件に基づいて調整できます。サーバー リソースを最大限に活用するには、worker_processes の値を CPU コアの数の倍数に設定する必要があることに注意してください。

リクエスト キューのチューニング

同時接続数がworker_connectionsの制限を超えると、Nginxはリクエストを処理待ちのキューに入れます。リクエストキューの長さとタイムアウトを調整して、サービス拒否の可能性を最小限に抑えることができます。

Nginx 構成ファイルの編集を続けて、次の行を追加または変更します。

http {
  ...
  events {
    accept_mutex off;
    worker_connections  1024;
    worker_processes  auto;
    multi_accept on;
    use epoll;
    ...
  }
  ...
  server {
    ...
    location / {
      proxy_pass http://backend;
      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_http_version  1.1;
      proxy_set_header        Upgrade $http_upgrade;
      proxy_set_header        Connection "upgrade";
      proxy_read_timeout      600s;
      proxy_connect_timeout   600s;
      proxy_send_timeout      600s;
      proxy_buffer_size       128k;
      proxy_buffers           4 256k;
      proxy_busy_buffers_size 256k;
      proxy_buffering         on;
      ...
    }
    ...
  }
}

上の例では、リクエスト キューにいくつかの調整を加えました。まず、accept_mutex を off に設定することで、ミューテックスを無効にして、複数のワーカー プロセスが同時に新しい接続を受け入れることができるようにします。次に、Nginx がキュー内のすべてのリクエストをできるだけ早く処理できるように、multi_accept を on に設定します。最後に、実際のニーズに応じてタイムアウトとバッファ サイズを設定します。

コード例

以下は、バックエンド アプリケーションをシミュレートする、単純な Node.js サーバーの例です。

const http = require('http');

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello, World!
');
});

server.listen(3000, 'localhost', () => {
  console.log('Server running at http://localhost:3000/');
});

上の例では、ローカル ポート 3000 をリッスンする単純な HTTP サーバーを作成しました。このサーバーはデモンストレーションのみを目的としているため、単純な「Hello, World!」文字列のみを返します。

Nginx をリバース プロキシ サーバーとして使用するには、上記のサンプル コードを server.js という名前のファイルとして保存し、次のコマンドを実行してサーバーを起動する必要があります:

node server.js

次に、次の Nginx 構成を nginx.conf という名前のファイルに保存します。

http {
  ...
  server {
    listen 80;
    location / {
      proxy_pass http://localhost:3000;
    }
  }
}

次のコマンドを実行して Nginx を起動します。

nginx -c /path/to/nginx.conf

これで、次のことが可能になります。 http://localhost にアクセスしてアプリケーションにアクセスします。すべてのリクエストは Nginx サーバーを通じてプロキシ処理され、負荷分散されます。

概要

接続数を制限し、要求キューを調整することで、同時実行性の高いネットワーク アプリケーションをより適切に管理できます。上記では、Nginx を使用して接続数を制限し、リクエスト キューを最適化する方法を説明し、簡単な Node.js サーバー コード例を示しています。実際のニーズとサーバーのハードウェア パフォーマンスに基づいて、適切な構成を調整してください。

以上がNginxリバースプロキシサーバーの接続制限とリクエストキューの調整方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。