Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

currently my hosting uses a new firewall, and according to their plan, they don't allow any http connection based on ipv6 and all connections should use ipv4. I have a service using node.js and expressJs, and I also use pm2 as a process manager to run my application, my problem is that http requests failed due to using ipv6. How could I force node.js to listen to version 4 IP address on nodeJs app.

The part of my code which I listen to a port:

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
    });

Can I use something like below with express:

var server = http.createServer(app).listen(APP_PORT, APP_IP);
like image 606
Arash Rabiee Avatar asked Oct 24 '25 18:10

Arash Rabiee


1 Answers

I was curious about it too, but based on a useful link it worked like a charm : https://github.com/nodejs/node/issues/18041.

I had this block of code :

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

In order to listen on ipv4, I made the following change :

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

Giving the try one more time the port was listening with ipv4, otherwise it is listening on ipv6 :

$ sudo netstat -lntp |grep -i 3000
tcp        0      0 127.0.0.1:3000          0.0.0.0:*               LISTEN      20501/node /home/ml
like image 169
Manuel Lazo Avatar answered Oct 26 '25 08:10

Manuel Lazo