「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Node.js アプリケーション用 NGINX: 何を、なぜ、どのように使用するか

Node.js アプリケーション用 NGINX: 何を、なぜ、どのように使用するか

2024 年 11 月 4 日に公開
ブラウズ:283

NGINX for Node.js Applications: What, Why, and How to Use It

Node.js アプリケーションのスケーリングと最適化に関しては、NGINX は高トラフィックの処理、静的ファイルの効率的な提供、ロード バランサーとしての機能において重要な役割を果たします。高性能 Web サーバーである NGINX はリバース プロキシとしても機能し、リクエストを複数のサーバーに分散できます。この記事では、NGINX とは何か、Node.js で NGINX を使用する必要がある理由、およびリバース プロキシ、負荷分散、静的コンテンツの提供などのさまざまなタスク用に NGINX を構成する方法について説明します。

NGINXとは何ですか?

NGINX (「エンジン X」と発音) は、高性能で多数の同時接続を処理するように設計された強力な Web サーバーおよびリバース プロキシです。当初は Web サーバーとして作成されましたが、NGINX の多用途性により、ロード バランシング、リバース プロキシ、静的ファイルの提供まで拡張されました。

Node.js で NGINX を使用する理由

  • 効率的な負荷分散: NGINX は複数の Node.js インスタンスにトラフィックを分散し、スケーラビリティを強化できます。
  • リバース プロキシ: クライアントとバックエンド Node.js サーバーの間の仲介サーバーとして機能し、アプリケーション アーキテクチャを隠してリクエストのバランスを取るのに役立ちます。
  • 静的コンテンツ処理: NGINX は画像、CSS、JavaScript などの静的ファイルを提供できるため、Node.js がこのタスクから解放され、パフォーマンスが向上します。
  • SSL 終了: NGINX は SSL (TLS) 暗号化を処理できるため、Node.js の負担が軽減され、セキュリティが向上します。

Node.js を使用した NGINX のセットアップ

Node.js 用に NGINX を構成するには、次の手順に従います:

ステップ 1: NGINX をインストールする

まず、サーバーに NGINX をインストールする必要があります。オペレーティング システムに基づいて次のコマンドを使用します:

Ubuntu/Debian の場合:

sudo apt update
sudo apt install nginx

CentOS/RHEL の場合:

sudo yum install nginx

インストール後、次のコマンドで NGINX を起動できます:

sudo systemctl start nginx

ブラウザでサーバーの IP アドレスにアクセスすると、NGINX が実行されていることを確認できます。 NGINX が動作している場合は、デフォルトの NGINX ようこそページが表示されます。

ステップ 2: NGINX を Node.js のリバース プロキシとして構成する

NGINX をリバース プロキシとして有効にして、クライアント リクエストを Node.js アプリケーションに転送できるようにするには、それに応じて NGINX を構成する必要があります。

これは、localhost:3000 で実行される Node.js アプリケーションの NGINX 構成の例です。

  1. NGINX 構成ディレクトリに移動します。
   cd /etc/nginx/sites-available/
  1. Node.js アプリケーション用の新しい NGINX 構成ファイルを作成します。
   sudo nano nodeapp.conf
  1. 次の構成を追加します。
server {
    listen 80;
    server_name your_domain_or_IP;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}
  1. サイト対応ディレクトリへのシンボリックリンクを作成して構成を有効にします。
   sudo ln -s /etc/nginx/sites-available/nodeapp.conf /etc/nginx/sites-enabled/
  1. NGINX 構成の構文エラーをテストします。
   sudo nginx -t
  1. すべてが正常であれば、NGINX を再起動します。
   sudo systemctl restart nginx

この設定では、ポート 80 上のすべての受信トラフィックが、ポート 3000 で実行されている Node.js アプリケーションにルーティングされます。

Node.js のロード バランサーとしての NGINX

Node.js アプリケーションが大きくなると、単一のインスタンスではトラフィックを処理できなくなる可能性があります。 NGINX は、複数の Node.js インスタンスにトラフィックを分散するロード バランサーとして構成できます。

負荷分散用に NGINX を構成する方法は次のとおりです:

  1. NGINX 構成ファイル (nodeapp.conf) を作成または編集します。
   sudo nano /etc/nginx/sites-available/nodeapp.conf
  1. 負荷分散を有効にするには、次の構成を追加します。
upstream node_backend {
    server localhost:3000;
    server localhost:3001;
    server localhost:3002;
}

server {
    listen 80;
    server_name your_domain_or_IP;

    location / {
        proxy_pass http://node_backend;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}
  1. ファイルを保存し、構成をテストして、NGINX を再起動します。
sudo nginx -t
sudo systemctl restart nginx

説明

  • アップストリーム ブロックは複数の Node.js サーバー (localhost:3000、localhost:3001、および localhost:3002) を定義し、NGINX はこれらのサーバー間で受信トラフィックのバランスをとります。
  • NGINX はデフォルトでラウンドロビン アルゴリズムを使用し、各サーバーに順番にリクエストを送信します。

この設定により、複数の Node.js インスタンスに負荷が均等に分散され、スケーラビリティとフォールト トレランスが向上します。

NGINX を使用した静的コンテンツの提供

画像、CSS、JavaScript などの静的ファイルを提供すると、Node.js アプリケーションに負担がかかる可能性があります。 NGINX はこの責任を軽減し、静的アセットを直接提供することでパフォーマンスを向上させることができます。

  1. 静的ファイル用のディレクトリを作成します (例: /var/www/html/static/)。
   sudo mkdir -p /var/www/html/static
  1. 静的ファイル (CSS、画像、JS) をこのディレクトリに移動します。

  2. 静的ファイルを提供するために NGINX 構成 (nodeapp.conf) を更新します:

server {
    listen 80;
    server_name your_domain_or_IP;

    location /static/ {
        root /var/www/html;
    }

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}
  1. 構成をテストし、NGINX を再起動します。
sudo nginx -t
sudo systemctl restart nginx

説明

  • 静的ファイル (例: your_domain_or_IP/static/style.css) に対するリクエストは、NGINX によって /var/www/html/static/ ディレクトリから直接処理され、Node.js サーバーの負荷が軽減されます。

NGINX による SSL 終了

クライアントとサーバー間の安全な通信は非常に重要であり、SSL (Secure Sockets Layer) がその暗号化を提供します。 NGINX は SSL 終了を処理できます。つまり、HTTPS リクエストを Node.js アプリケーションに渡す前に、HTTPS リクエストの暗号化と復号化を処理します。

NGINX で SSL を設定する方法は次のとおりです:

  1. SSL証明書を取得します。 Let’s Encrypt から無料の SSL 証明書を取得することも、他の認証局を使用することもできます。

  2. SSL を有効にするために NGINX 構成を変更します:

server {
    listen 443 ssl;
    server_name your_domain_or_IP;

    ssl_certificate /etc/ssl/certs/your_domain.crt;
    ssl_certificate_key /etc/ssl/private/your_domain.key;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

server {
    listen 80;
    server_name your_domain_or_IP;

    # Redirect all HTTP requests to HTTPS
    return 301 https://$host$request_uri;
}
  1. NGINX をテストして再起動します。
sudo nginx -t
sudo systemctl restart nginx

説明

  • listen 443 ssl ディレクティブにより、NGINX は HTTPS トラフィックをリッスンします。
  • ssl_certificate と ssl_certificate_key は、SSL 証明書と秘密キーへのパスを指定します。
  • HTTP から HTTPS へのリダイレクトにより、すべてのトラフィックで SSL が使用されるようになります。

結論

NGINX は、Node.js アプリケーションのパフォーマンス、スケーラビリティ、セキュリティを向上させる強力なツールです。負荷分散から静的ファイルの提供、SSL 終了の処理まで、NGINX は多くのタスクを Node.js からオフロードし、アプリケーションが最も得意とするビジネス ロジックの処理に集中できるようにします。この記事で提供されている構成を使用すると、NGINX をセットアップして Node.js アプリケーションの効率と信頼性を向上させることができます。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/imsushant12/nginx-for-nodejs-applications-what-why-and-how-to-use-it-1gbn?1 侵害がある場合は、study_golang にご連絡ください。 @163.com 削除
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3