diff --git a/lib/node-http-proxy.js b/lib/node-http-proxy.js index c3bff9d..5b5e063 100644 --- a/lib/node-http-proxy.js +++ b/lib/node-http-proxy.js @@ -328,6 +328,7 @@ HttpProxy.prototype.close = function () { // options.host {string} Host of the proxy target. // options.buffer {Object} Result from `httpProxy.buffer(req)` // options.https {Object|boolean} Settings for https. +// options.allow_xforwarded_headers {boolean} Don't clobber x-forwarded headers to allow layered proxies. // HttpProxy.prototype.proxyRequest = function (req, res, options) { var self = this, errState = false, location, outgoing, protocol, reverseProxy; @@ -340,6 +341,7 @@ HttpProxy.prototype.proxyRequest = function (req, res, options) { options = options || {}; options.host = options.host || this.target.host; options.port = options.port || this.target.port; + options.allow_xforwarded_headers = options.allow_xforwarded_headers || false; // // Check the proxy table for this instance to see if we need @@ -379,9 +381,11 @@ HttpProxy.prototype.proxyRequest = function (req, res, options) { // * `x-forwarded-proto`: Protocol of the original request // * `x-forwarded-port`: Port of the original request. // - req.headers['x-forwarded-for'] = req.connection.remoteAddress || req.connection.socket.remoteAddress; - req.headers['x-forwarded-port'] = req.connection.remotePort || req.connection.socket.remotePort; - req.headers['x-forwarded-proto'] = res.connection.pair ? 'https' : 'http'; + if (options.allow_xforwarded_headers == true) { + req.headers['x-forwarded-for'] = req.connection.remoteAddress || req.connection.socket.remoteAddress; + req.headers['x-forwarded-port'] = req.connection.remotePort || req.connection.socket.remotePort; + req.headers['x-forwarded-proto'] = res.connection.pair ? 'https' : 'http'; + } // // Emit the `start` event indicating that we have begun the proxy operation.