2013-07-31 9 views
7

AWS just added support to ELBPROXY protocol के लिए, जो टीसीपी धाराओं को लपेटता है और क्लाइंट आईपी पता (प्रॉक्सी द्वारा देखा गया) जोड़ता है ताकि बैकएंड सर्वर के पास क्लाइंट के आईपी तक पहुंच हो (क्योंकि यह अन्यथा ईएलबी के आईपी को देखेगी)।क्लाइंट का वास्तविक आईपी पता प्राप्त करने के लिए मैं PROXY प्रोटोकॉल का उपयोग कैसे करूं?

मुझे पता है कि ईएलबी HTTP (एस) मोड में चला सकता है, जहां ईएलबी X-Forwarded-For हेडर डालता है, लेकिन मैं अपने ईएलबी को टीसीपी मोड में चलाता हूं ताकि मैं SPDY पर अपनी साइट परोस सकूं।

PROXY प्रोटोकॉल का उपयोग करने के लिए मैं अपने node.js ऐप (एक्सप्रेस का उपयोग करके) कैसे संशोधित कर सकता हूं?

उत्तर

12

I made a module caled proxywrap कि लपेटता Node.js Server रों और स्वचालित रूप से कनेक्शन 'धाराओं से प्रॉक्सी प्रोटोकॉल हेडर निकालता है, socket.remoteAddress और socket.remotePort मूल्यों प्रॉक्सी हेडर में पाया करने के लिए रीसेट करता है।

यह साथ काम करता है में निर्मित Server मॉड्यूल (जैसे http, https, और net) मॉड्यूल के लिए एक ड्रॉप में स्थानापन्न के रूप में:

var http = require('http') 
    , proxiedHttp = require('proxywrap').proxy(http) 
    , express = require('express') 
    , app = express() 
    , srv = proxiedHttp.createServer(app); // instead of http.createServer(app) 

app.get('/', function(req, res) { 
    res.send('IP = ' + req.connection.remoteAddress + ':' + req.connection.remotePort); 
}); 

srv.listen(80); 

यह भी spdy module साथ काम करता है:

var proxiedSpdy = require('proxywrap').proxy(require('spdy').server); 

बेशक, आपको enable the PROXY protocol on your ELB (या जो भी आपका ऐप पीछे है) होगा।

+0

क्या यह ईएलबी के पीछे सॉकेट.ओ के साथ काम करेगा? – ngzhongcai

+1

हां। यह कम स्तर पर काम करता है; यह परवाह नहीं है कि प्रोक्सी हेडर के बाद क्या होता है। – josh3736

संबंधित मुद्दे

 संबंधित मुद्दे