Vagrant中端口无法转发的终极解决方法
记得以前曾经在flask中遇到过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及端口绑定修改方法:
- rails的启动方式:
rails s -b 0.0.0.0
- flask的启动方式:
flask run --host=0.0.0.0
- Nuxt.js Host和端口配置:https://nuxtjs.org/faq/host-port/
当然,这些操作的前提是你的防火墙firewalld是没有问题的,要么处于服务停止状态要么有给该端口放行的规则。