Nodejs クライアント IP を転送する

WBOY
リリース: 2023-05-14 10:07:37
オリジナル
544 人が閲覧しました

過去のネットワーク開発では、データ転送が必要な場合、多くの場合、クライアントの IP アドレスを取得する必要がありました。 Node.js を使用して開発されたアプリケーションの場合、クライアント IP アドレスを取得してデータを転送する必要もよくあります。この記事では、読者がネットワーク アプリケーションをより適切に開発できるように、クライアントの IP アドレスを取得する方法と Node.js でデータを転送する方法を紹介します。

クライアント IP アドレスの取得

クライアント IP アドレスの取得方法を理解する前に、まず HTTP 要求ヘッダーの概念をいくつか理解する必要があります。 HTTP リクエスト ヘッダーには、X-Forwarded-For (XFF) と呼ばれるヘッダー フィールドがあり、このフィールドは通常、リクエストをバックエンド サーバーに転送するときにプロキシ サーバーによって追加されます。これには、複数のプロキシ サーバーを通過した後のリクエストの実際の IP アドレスを表す一連の IP アドレスが含まれており、最後の IP アドレスがクライアントの実際の IP アドレスです。

Node.js では、リクエスト ヘッダーにアクセスすることでクライアントの IP アドレスを取得できます。以下はサンプル コードです。

const http = require('http');

http.createServer((req, res) => {
  console.log(req.headers['x-forwarded-for'] || req.socket.remoteAddress);
  res.end('Hello World!');
}).listen(3000);
ログイン後にコピー

上記のコードでは、req.headers['x-forwarded-for'] を使用してクライアントの IP アドレスを取得しました。このフィールドが存在しない場合は、req.socket.remoteAddress を使用して、要求されたリモート IP アドレスを取得します。これは、ほとんどの場合、この IP アドレスがクライアントのアドレスでもあるためです。

プロキシ サーバーによっては、リクエストに XFF ヘッダー フィールドを追加しない場合があることに注意してください。この場合、クライアントの IP アドレスを取得する他の方法を検討する必要があります。

データ転送

ドメイン駆動設計 (DDD) では、データ転送とは、複数のシステム間でデータを転送し、これらのシステムがデータを共有して連携できるようにすることを指します。この転送方法は、大規模な分散システムで主に使用されます。 Node.js アプリケーションでは、負荷分散やクラスタリングなどに役立つデータ転送がネットワーク アプリケーションで一般的に使用されます。以下では、データ転送を実装するための 2 つの方法、WebSocket と HTTP 転送を紹介します。

WebSocket 転送

WebSocket は、クライアントとサーバー間の双方向通信チャネルの確立を可能にする TCP ベースのプロトコルです。 Node.js では、WebSocket モジュールを使用してデータ転送を実装できます。

以下は、WebSocket を使用してデータ転送を行うサンプル コードです。

const WebSocket = require('ws');

const server = new WebSocket.Server({ port: 8080 });

server.on('connection', (socket) => {
  console.log('A new client connected');

  socket.on('message', (message) => {
    console.log(`Received message from client: ${message}`);

    // 将消息广播给其他客户端
    server.clients.forEach((client) => {
      if (client.readyState === WebSocket.OPEN && client !== socket) {
        client.send(message);
      }
    });
  });

  socket.on('close', () => {
    console.log('A client disconnected');
  });
});
ログイン後にコピー

上記のコードでは、WebSocket モジュールを使用して WebSocket サーバーを作成し、クライアント接続イベントをリッスンします。クライアントが WebSocket サーバーに接続すると、プロンプト メッセージがコンソールに出力されます。次に、クライアントからメッセージを受信すると、このメッセージをサーバー上の他のクライアントにブロードキャストします。最後に、クライアントが切断されると、対応するプロンプト情報もコンソールに出力します。

HTTP 転送

データ転送を実装するもう 1 つの方法は、HTTP リクエストを使用することです。 Node.js では、http モジュールを使用してデータ転送を実装できます。コード例は次のとおりです:

const http = require('http');

http.createServer((req, res) => {
  const options = {
    hostname: 'localhost',
    port: 8080,
    path: req.url,
    method: req.method,
    headers: req.headers
  };

  const proxyReq = http.request(options, (proxyRes) => {
    res.writeHead(proxyRes.statusCode, proxyRes.headers);
    proxyRes.pipe(res);
  });

  req.pipe(proxyReq);
}).listen(3000);
ログイン後にコピー

上記のコードでは、http モジュールを使用して HTTP サーバーを作成します。クライアントから HTTP リクエストを受信すると、そのリクエストを別のサーバーに転送します。これを行うには、proxyReq 変数を作成し、http.request() メソッドを使用して別のサーバーにリクエストを送信します。別のサーバーから応答を受信すると、res.writeHead() メソッドを使用して応答ヘッダーを応答に書き込み、応答ストリームを使用して応答本文をクライアントに送り返します。

概要

この記事では、Node.js でクライアントの IP アドレスを取得する方法と、一般的に使用される 2 つのデータ転送方法である WebSocket と HTTP 転送を読者に紹介しました。これらのテクノロジーは、ネットワーク アプリケーションの開発を改善し、アプリケーションのパフォーマンスとスケーラビリティを向上させるのに役立ちます。同時に、アプリケーションのセキュリティと信頼性を確保するために、ネットワークのセキュリティにも十分な注意を払う必要があります。

以上がNodejs クライアント IP を転送するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!