mirror of
https://github.com/http-party/node-http-proxy.git
synced 2025-12-08 20:59:18 +00:00
determine x-forwarded-port from host header
`req.remotePort' returns the ephemeral port, which is not useful. node v0.10.0 added `req.localPort' which returns what we want, but we want to maintain backwards compatibility. Fixes #341 & #227
This commit is contained in:
parent
7e8041d2b6
commit
d4e91ebc33
@ -149,11 +149,11 @@ HttpProxy.prototype.proxyRequest = function (req, res, buffer) {
|
||||
}
|
||||
|
||||
if (req.headers['x-forwarded-port']) {
|
||||
var portToAppend = "," + req.connection.remotePort || req.socket.remotePort;
|
||||
var portToAppend = "," + getPortFromHostHeader(req);
|
||||
req.headers['x-forwarded-port'] += portToAppend;
|
||||
}
|
||||
else {
|
||||
req.headers['x-forwarded-port'] = req.connection.remotePort || req.socket.remotePort;
|
||||
req.headers['x-forwarded-port'] = getPortFromHostHeader(req);
|
||||
}
|
||||
|
||||
if (req.headers['x-forwarded-proto']) {
|
||||
@ -489,11 +489,11 @@ HttpProxy.prototype.proxyWebSocketRequest = function (req, socket, upgradeHead,
|
||||
}
|
||||
|
||||
if (req.headers['x-forwarded-port']) {
|
||||
var portToAppend = "," + req.connection.remotePort || socket.remotePort;
|
||||
var portToAppend = "," + getPortFromHostHeader(req);
|
||||
req.headers['x-forwarded-port'] += portToAppend;
|
||||
}
|
||||
else {
|
||||
req.headers['x-forwarded-port'] = req.connection.remotePort || socket.remotePort;
|
||||
req.headers['x-forwarded-port'] = getPortFromHostHeader(req);
|
||||
}
|
||||
|
||||
if (req.headers['x-forwarded-proto']) {
|
||||
@ -956,6 +956,17 @@ HttpProxy.prototype._forwardRequest = function (req) {
|
||||
});
|
||||
};
|
||||
|
||||
function getPortFromHostHeader(req) {
|
||||
var portMatch = req.headers.host.match(/:(\d+)$/);
|
||||
|
||||
if(portMatch) {
|
||||
return parseInt(portMatch[1]);
|
||||
}
|
||||
else {
|
||||
return getProto(req) === 'https' ? 443 : 80;
|
||||
}
|
||||
}
|
||||
|
||||
function getProto(req) {
|
||||
return req.isSpdy ? 'https' : (req.connection.pair ? 'https' : 'http');
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user