MacOS中80端口被占用解决方法

最近在用mac做前端开发。

利用nodejs启用80端口作静态服务器时,启动报错如下:

#

events.js:160

throw er; // Unhandled ‘error’ event

^

Error: listen EADDRINUSE 0.0.0.0:80

at Object.exports._errnoException (util.js:1022:11)

at exports._exceptionWithHostPort (util.js:1045:20)

at Server._listen2 (net.js:1262:14)

at listen (net.js:1298:10)

at doListening (net.js:1397:7)

at _combinedTickCallback (internal/process/next_tick.js:77:11)

at process._tickCallback (internal/process/next_tick.js:98:9)

at Module.runMain (module.js:609:11)

at run (bootstrap_node.js:420:7)

at startup (bootstrap_node.js:139:9)

at bootstrap_node.js:535:3
这是因为80端口被占用,所以启动失败。

网上一查发现原来mac自动启动了一个Apache服务器做web共享,启用的80端口。故我的webapp没法用80端口启动。

于是先把Apache的web共享服务换到其他的端口,方法如下:

sudo vi /etc/apache2/httpd.conf
把其中的Listen 80 中的80端口换为其他端口,我换为9080, 之后重启apache,运行以下命令:
sudo /usr/sbin/apachectl restart
好了,到此,Apache服务器对80端口的占用已经解除。

现在直接启动webapp服务时,又报了另外的错误:

events.js:160

throw er; // Unhandled ‘error’ event

^

Error: listen EACCES 0.0.0.0:80

at Object.exports._errnoException (util.js:1022:11)

at exports._exceptionWithHostPort (util.js:1045:20)

at Server._listen2 (net.js:1249:19)

at listen (net.js:1298:10)

at doListening (net.js:1397:7)

at _combinedTickCallback (internal/process/next_tick.js:77:11)

at process._tickCallback (internal/process/next_tick.js:98:9)

at Module.runMain (module.js:609:11)

at run (bootstrap_node.js:420:7)

at startup (bootstrap_node.js:139:9)

at bootstrap_node.js:535:3
这是因为mac对普通用户1024以下的端口全部禁用,如果你切换到root用户,或者使用sudo 启动,就可以成功启动了。

若还是启动失败,报80端口被占用,可以查看端口被占用情况再操作。

mac查看端口使用情况 方法如下 :

lsof -i :80 | grep LISTEN
可以获得占用80端口的进程PID,利用kill命令终结进程。

我查看的是9020端口,显示的是PID为35730的进程占用了9020。可用kill 命令直接终结 : kill -9 9020

%e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7-2016-12-01-16-49-16

之后你就可以启动你的webapp啦。