NodeJSからクライアントIPアドレスを取得することについて、チュートリアル、記事、stackoverflowの質問をたくさん見ました。ほとんどすべてがこれを使用していますrequest.header('x-forwarded-for')
。MyNodeJS v0.8.7
にはそのrequest.header関数がありません。
typeof request.header
戻り値undefined
ただし、いくつかの情報を含むオブジェクトであるrequest.headersがあります。
{ host: '127.0.0.1:8000',
connection: 'keep-alive',
accept: '*/*',
'user-agent': 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1',
'accept-encoding': 'gzip,deflate,sdch',
'accept-language': 'en-US,en;q=0.8',
'accept-charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3' }
ホストの値はチェックする価値があるようでした。ローカルホストで実行中のノードは明らかに戻り127.0.0.1:8000
ましたが、同じネットワーク上のネットブックから192.168.0.13(ノードが実行されているデスクトップIP)をポイントしてnode.jsサイトにアクセスしようとすると、が取得され192.168.0.13:8000
ました。つまり、クライアントIPは提供されませんが、アプリを指すためにどのIPを使用するかがわかります。
request.connection.remoteAddress
見つけたチュートリアルに名前が付けられたので、試してみました。ローカルホストから実行すると、、127.0.0.1
および私のネットブックから実行され192.168.0.12
ます。うまくいきました!192.168.0.12は私のネットブックのIPです。しかし、チュートリアルと質問で、プロキシがあなたのものであるかどうかに応じて、正しい方法が最初の方法であると彼らが言っていることがわかりました。
それで、それを行う正しい方法は何でしょうか?そして、なぜrequest.headerが私に存在しないのですか?