Vagrant中端口无法转发的终极解决方法

记得以前曾经在flask中遇到过vagrant端口转发失败的问题《》,文中在启动flask服务的时候加上了--host=0.0.0.0参数来解决了服务IP绑定的问题。

今天在使用Nuxt.JS的时候同样遇到端口转发失败的问题,不管是forwarded_port做宿主电脑端口映射还是在private_network中使用原端口都不行。

于是用netstat命令查了端口绑定情况:

Tip:CentOS默认是没有netstat的,你需要通过命令yum -y install net-tools来安装它,注意后面的包名称。

[root@localhost ~]# netstat -ltpn | grep 3000
tcp        0      0 127.0.0.1:3000          0.0.0.0:*               LISTEN      4315/node           
[root@localhost ~]# netstat -ltpn | grep 1337
tcp6       0      0 :::1337                 :::*                    LISTEN      4478/node /var/www/ 

发现问题了么?在上面这两个node的应用中,Nuxt.JS应用绑定的3000的端口是无论如何都无法在vagrant宿主电脑中访问的,而使用1337端口的strapi应用是完全没问题的。这里的问题就出在了前者绑定了”127.0.0.1“这个IP地址,而后者没有这个问题。

解决方法

解除IP地址绑定,或者在启动服务的时候指定”0.0.0.0“IP地址,此法不仅适用于NodeJS,Python和其它等语言的各种应用也同理。

以笔者当前遇到的nuxt.js应用为例,修改nuxt.config.js文件,在module.exports = { .. } 区块中加入

 server: {
    port: 3000, // default: 3000
    host: '0.0.0.0', // default: localhost
  },

重启服务,在宿主电脑上再次访问,一切正常。

注,各类应用的IP及端口绑定修改方法:

当然,这些操作的前提是你的防火墙firewalld是没有问题的,要么处于服务停止状态要么有给该端口放行的规则。

Post Comment