GX博客

分享个人 Full-Stack JavaScript 项目开发经验

Node.js中的IPv4地址获取

Node.js 提供了设置 http 服务的端口号和主机名的异步方法 server.listen([port][, hostname][, backlog][, callback])。其中,hostname 参数用于设置接受 IP 地址的形式。下面以 koa2 框架为例,说明 Web 应用程序如何获取客户端 IPv4 地址。


修改入口文件

当你使用的是 v2.2.0 的 koa2,在入口文件 bin/www 中,可以找到:

server.listen(port);

hostname 参数被省略,则使用默认值 '::'。服务器将会在 IPv6 可用时接受任何 IPv6 地址上的连接。如果想要设置为接受 IPv4 地址,则使用参数 '0.0.0.0' ,即:

server.listen(port, '0.0.0.0');

值得一提,若省略 port 参数,或使用端口值0,则会让操作系统分配一个随机端口。这时可以使用 server.address().port 在 'listening' 事件发出后检索实际使用的端口:

server.on('listening', function () {
    // server.address().port
});

若你使用的是 v2.3.0 的 koa2,在入口文件 app.js 中修改 app.listen 方法参数,如:

module.exports = app.listen(config.port, '0.0.0.0', () => {
  console.log(`Listening on http://localhost:${config.port}`)
})

获取 IP 地址

在 koa2 的路由/控制器中可获取 IP 地址:

module.exports = async (ctx, next) => {
    // ctx.ip
    // 若使用 Nginx 作为反向代理,则应配置代理请求头 proxy_set_header X-Real-IP $remote_addr;
    // 然后通过 ctx.headers['x-real-ip'] 获取。使用 Nginx 请求头方式,并不需要修改上述参数。
};

版权声明:

本文为博主原创文章,若需转载,须注明出处,添加原文链接。

https://leeguangxing.cn/blog_post_4.html