如何强制 Node.js PM2 基于 IPv4 运行

how to force node.js pm2 to run based on ipv4

提问人:Arash Rabiee 提问时间:2/9/2020 最后编辑:Arash Rabiee 更新时间:8/5/2022 访问量:7092

问:

目前,我的主机使用新的防火墙,根据他们的计划,他们不允许任何基于IPv6的HTTP连接,所有连接都应使用IPv4。 我有一个使用 node.js 和 expressJs 的服务,我也使用 pm2 作为进程管理器来运行我的应用程序,我的问题是 http 请求由于使用 ipv6 而失败。如何强制 node.js 侦听 nodeJs 应用程序上的版本 4 IP 地址。

我监听端口的代码部分:

const app = express();
...MANY MIDDLEWARE app.use();

mongoose.connect(MONGODB_URI, {useNewUrlParser: true, useUnifiedTopology: true})
    .then(result => {
        app.listen(APP_PORT);
        socketServer.listen(SOCKET_PORT, function () {
            console.log('server listening to: %j', socketServer.address())
        });

    })
    .catch(err => {
        console.log
    });

我可以在 express 中使用如下内容吗:

var server = http.createServer(app).listen(APP_PORT, APP_IP);
节点.js Express PM2 IPv4

评论

1赞 Aritra Chakraborty 2/9/2020
通过pm2是什么意思?,因为nodejs服务器就像任何http服务器一样,你引用该服务器的方式是通过。现在 IP 可以是 IPv4 和 IPv6。您需要在 node.js 应用中指定仅侦听 IPv4,而不侦听 IPv6。pm2 是一个进程管理器,它只运行你的 nodejs 代码。您可以共享代码的相关部分,以便更清晰。use IPv4IP:port
1赞 Aritra Chakraborty 2/9/2020
您可以简单地替换为 for IPv4app.listen(APP_PORT);app.listen(APP_PORT, '0.0.0.0');
1赞 Aritra Chakraborty 2/9/2020
app.listen你可以说你正在做的一个超集。它应该工作相同。 表示它将侦听任何 IPv4 连接。server.listen0.0.0.0
1赞 Dev Ze 4/20/2020
我看到了相同的行为,我使用,但我仍然从 .可能是某个中间件?app.listen(APP_PORT, '0.0.0.0');req.ip
1赞 Dev Ze 4/20/2020
编辑:我发现这个问题 stackoverflow.com/questions/50855419/ 有用的评论...... 它指出,如果用户通过 ipv4 连接,可能根本没有 ipv6......

答:

3赞 Manuel Lazo 1/6/2021 #1

我也对它很好奇,但基于一个有用的链接,它就像一个魅力:.https://github.com/nodejs/node/issues/18041

我有这个代码块:

var server = http.createServer(app);
server.listen(port);

为了监听 ipv4,我做了以下更改:

var server = http.createServer(app);
server.listen(port,"127.0.0.1");

再试一次,端口正在侦听 ipv4,否则它正在侦听 ipv6 :

$ sudo netstat -lntp |grep -i 3000
tcp        0      0 127.0.0.1:3000          0.0.0.0:*               LISTEN      20501/node /home/ml