我有一个 Node 文件,它执行以下操作:
它监听两个端口: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});
...
}
我需要在代理服务器的请求 header 中对代理服务器执行类似 res.append('X-Forwarded-For',req.connection.remoteAddress) 的操作。设置地址的问题是次要的。我首先需要设置目标服务器可以读取的 header 本身。代理本身不设置此 header ,我认为默认情况下应该设置此 header 。还是应该这样?还是我在阅读它时做错了什么?
最佳答案
我看不到您对 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);
我希望这会有所帮助。
关于node.js - 为什么 Node-express 代理未设置 X-Forwarded-For header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32793886/