我有一个节点文件,它执行以下操作:
它侦听两个端口:80和443(用于https)。 它将连接重定向到80到443。
在443上是一个反向代理,通过普通的http进行循环重定向到几个本地服务器。
我遇到的问题是,在实际的目标服务器中,我无法获得浏览器的实际远程IP地址。 我得到了反向代理的地址。 请求是由反向代理进行的,所以我猜是这样。
因此,我在反向代理中执行了以下操作(仅显示了相关的代码行):
proxy = httpProxy.createServer();
var https_app = express();
https.createServer(sslCerts, https_app).listen(443, function () {
...
});
https_app.all("/",function(req, res) {
...
//res.append('X-Forwarded-For',req.connection.remoteAddress);
proxy.web(req,res, {target: local_server});
...
}
我需要在其请求标头中对代理服务器执行res.append(' X-Forwarded-For',req.connection.remoteAddress)等操作。设置地址的问题是次要的。我首先需要设置标题本身,目标服务器可以读取。代理本身不设置此标头,我认为默认情况下应该这样。还是应该呢?或者它和我做错了什么来读它?
答案 0 :(得分:1)
我无法看到您对proxy
的定义,但我假设它与使用express-http-proxy
的以下代码相同。我希望这种替代方法对您有用:
var proxy = require('express-http-proxy');
var myProxy= proxy('localhost:443', {
forwardPath: function (req, res) {
return require('url').parse(req.url).path;
}
});
然后简单地说:
app.use("/*", myProxy);
我希望这会有所帮助。