【发布时间】:2017-11-14 13:36:06
【问题描述】:
我正在尝试创建一个使用 SSL 的 nodejs 应用程序。我已经配置了证书、域和 nodejs 并且可以正常工作,但是当我使用 Ctrl+C 停止我的节点服务器时有时会遇到问题。尝试重新启动节点服务器时出现以下错误:
Error: listen EADDRINUSE :::443
at Object.exports._errnoException (util.js:870:11)
at exports._exceptionWithHostPort (util.js:893:20)
at Server._listen2 (net.js:1237:14)
at listen (net.js:1273:10)
at Server.listen (net.js:1369:5)
at Object.<anonymous> (/var/www/html/server.js:212:47)
at Module._compile (module.js:410:26)
at Object.Module._extensions..js (module.js:417:10)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
现在我知道这意味着该端口正在使用中,但我尝试了几种方法来找到正在使用该端口的进程,但我找不到。我尝试过的一些值得一提的事情是 netstat:
$ sudo netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1164/sshd
tcp6 0 0 :::22 :::* LISTEN 1164/sshd
udp 0 0 0.0.0.0:68 0.0.0.0:* 882/dhclient
和ps:
$ ps aux |grep node
ubuntu 7632 0.0 0.0 12944 988 pts/0 S+ 23:30 0:00 grep --color=auto node
但是他们都没有告诉我什么在使用端口 443。我有 pm2 来保持我的节点服务器处于运行状态,但它一直说 errored 然后我在 pm2 错误日志中找到了 EADDRINUSE 错误。我已经把头撞在墙上好几个小时了。任何人都可以帮助我吗?谢谢!
【问题讨论】:
-
服务器运行时是否显示 443 正在使用?也许它试图在那里听两次?或者,在您运行
netstat时,可能有一个 443 处于 TIME_WAIT 状态的过渡状态。 -
老实说,我没有在服务器运行时检查netstat。但我认为没有任何东西处于等待阶段,因为从那以后我一直无法重新启动服务器。我仍然无法运行我的节点服务器。
-
我认为
lsof -i tcp:443会得到进程ID,然后你可以杀死它。 -
什么也没显示,服务器仍然无法运行。
-
您能浏览到该服务器上的 443 端口吗?也就是说,它真的是开放和倾听的吗?
标签: node.js amazon-web-services ssl pm2