2017-05-19 16 views
2

私はhapijsノードの要求で私のアプリケーションを使用してクライアントのIPアドレスを取得する必要があります...私たちはサーバを稼働させるためにpm2とNginxを使用しています。 .info.addressしかし、サーバーのローカルIPには127.0.0.1が必要ですが、私のアプリケーションを使用しているクライアントのIPアドレスは、例えば:192.xx111 ...要求に応じてクライアントIPアドレスを取得する

+0

[どのノード内のユーザーのIPアドレスを決定する]の可能な重複(http://stackoverflow.com/questions/8107856/どのようにユーザーを決定するのかを知るために) – str

答えて

1

私はいつもクライアントのIPアドレスをこの関数で取得しています。 )

return request.headers['x-forwarded-for'] || 
    request.connection.remoteAddress || 
    request.socket.remoteAddress || 
    request.connection.socket.remoteAddress; 

希望します。場合

+0

ごめんなさい@Sparwこれらを試してみたところ、結果は以下の通りです: req.headers ['x-forwarded-for'] => '未定義 ' request.connection.remoteAddress || request.socket.remoteAddress ||エラー: ** 'デバッグ:内部、実装、エラー TypeError:キャッチされていないエラー:未定義の' remoteAddress 'プロパティを読み取ることができません ' ** – sunilsmith

+0

おそらくすべてを置き換える必要があります"req"による "要求"? – Sparw

0

あなたはnginxのプロキシサーバーの背後のサーバーを実行している場合、あなたは私がHAPIのために同じスタックを実行している

req.info.remoteAddress 
+0

私はこの仲間を試しましたが、まだ返されています**未定義**私のハンドラでIPを取得するために私のajaxに余分なヘッダ機能を追加する必要がありますか、Hapi.JsのためにreqのIPを得る特別な方法はあります私がサーフィンした答えは主にexpress.jsのため – sunilsmith

+0

あなたのリクエスト/ヘッダー/接続オブジェクトをコンソール化し、利用可能なすべてのプロパティーを確認することがベストでしょう。要求。infoはhapiで動作しますが、リクエストオブジェクト全体を調べて、なぜ動作していないのかを知りたい場合や、リクエストオブジェクトをここにすべてチェックするために投稿することができます。 –

1

を使用することができます

req.headers['x-real-ip'] 

を使用する必要がありますnginxとPM2のアプリ。同じホスト上のノードアプリケーションにnginxを介して要求をプロキシすると、リモートホストは常に127.0.0.1になります。これは、nginxが要求を同じホストに転送するためです。

ソリューション:リバースプロキシ(nginxなど)の背後にアプリを実行していても、実際のクライアントIPアドレスを決定する専用のプラグインhapi-geo-locateがあります。

hapi-geo-locateは、さまざまなプロキシとHTTPヘッダーをサポートしているため、アプリを実行しているユーザーのIPを別のプラットフォームに保存して取得する必要があります。

希望に役立ちます!

0

リバースプロキシ(nginx)の設定を確認して、あなたがそのIPを送信しているかどうか、それをやっているかどうか確認してください。

例えば

(nginxのconfの):ここでは

server { 
    listen  0.0.0.0:80; 
    server_name [your_domain]; 
    root /webroot/[your_domain or webapp name]; 
    access_log /var/log/nginx/[your_domain or webapp name].log; 

    location/{ 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header HOST $http_host; 
     proxy_set_header X-NginX-Proxy true; 

     proxy_pass http://127.0.0.1:[port assigned to node]; 
     proxy_redirect off; 
    } 
} 

、あなたはヘッダX-Real-IPを経由してクライアントのIPを取得します。ですから、requestオブジェクトへのアクセス権を持ってHapiJS、中

const ip = request.headers['x-real-ip'] || request.info.remoteAddress; 
関連する問題