したがって、私はnodejsWebソケットサーバーをnginxリバースプロキシの背後に配置しています。私のnginx構成は次のようになります:
server {
listen 80;
location / {
proxy_pass http://localhost:9898;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $remote_addr;
}
}
私のWebソケットサーバーアプリケーションコードには、後で取得するためにクライアントのIPアドレスをテーブルに格納するロジックが含まれています。クライアントが接続するときにクライアントのIPアドレスを取得するのに問題はありません。これは、新しい接続ごとにオブジェクトにreq.headers["x-forwarded-for"]
アクセスできるため、このようなことを簡単に実行できるためreq
です。私の問題は、特定のクライアントのサブセットにのみサーバーブロードキャストを送信する場合は常に、その「転送されたIPアドレス」を取得することです。私がそうするときはいつでもws._socket.remoteAddress
(ws
Webソケットオブジェクトはどこにありますか)、私は期待してIPアドレスを取得するから127.0.0.1
です:。
これは、Webソケットサーバーをホストするために使用している特定のnpmパッケージに関する質問だと思います:https://www.npmjs.com/package/ws。
あなたの質問はあなたがリンクしたNPMページで答えられます:
サーバーがNGINXのようなプロキシの背後で実行されている場合、デファクトスタンダードは
X-Forwarded-For
ヘッダーを使用することです。
wss.on('connection', function connection(ws, req) { const ip = req.headers['x-forwarded-for'].split(/\s*,\s*/)[0]; });
あなたは、その格納することができip
上のws
オブジェクト(実際には、あなたがすることができます多分上書きしws._socket.remoteAddress
ているとip
、その時点であまりにも)。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加