【发布时间】:2015-03-24 01:47:09
【问题描述】:
我正在学习 Node.js。在创建网站时,我将在本地运行该网站(localhost)。部署后,它将在其他服务器上运行。我的问题是,如何确定请求是否来自 localhost 或不在 Node 中?在 ASP.NET 中,我可以使用 Request.IsLocal。我正在尝试弄清楚如何在 Node 中做到这一点。
谢谢!
【问题讨论】:
标签: javascript node.js
我正在学习 Node.js。在创建网站时,我将在本地运行该网站(localhost)。部署后,它将在其他服务器上运行。我的问题是,如何确定请求是否来自 localhost 或不在 Node 中?在 ASP.NET 中,我可以使用 Request.IsLocal。我正在尝试弄清楚如何在 Node 中做到这一点。
谢谢!
【问题讨论】:
标签: javascript node.js
有server.address()获取服务器地址。
并且request 具有connection 和socket 对象,因为两者都可能包含远程地址(在remoteAddress 属性中),具体取决于当前连接的类型。
但如果服务器位于反向代理之后,您必须从适当的标头中提取它,很可能是x-forwarded-for。但是,如果代理被链接,我不确定这是否成立。
所以,总而言之,你会按照以下方式做一些事情:
function cliAddress(req) {
return req.connection.remoteAddress || req.socket.remoteAddress || req.headers['x-forwarded-for'];
}
server.isLocal = function(request) {
return server.address() === cliAddress(req);
}
如果您使用 express.js,请参阅 Express.js Req.IP API。
【讨论】:
request 上看不到connection 或socket 对象