Node.js - 如何从URL中去掉端口号?

37

我使用node.js和socket.io。

我的应用程序运行在3000端口。 应用程序从以下网址启动:mydomain.com:3000/

我想从mydomain.com运行应用程序 - 我想从网址中删除端口。

我应该在哪里以及如何设置此设置?


还有搜索将带出这个结果:https://dev59.com/pWYq5IYBdhLWcg3wpyRE - TheHippo
4个回答

24

查找你的server.listen调用,并将端口从3000更改为80。不要忘记在Linux系统上绑定到小于1024的端口时需要使用CAP_NET_BIND_SERVICE功能(有关详细信息,请参见capabilities(7))。root权限将包含此权限以及其他权限。


我尝试将端口设置为80,但应用程序被拒绝了。它是被禁止的。 - Jenan
应用程序已中止?这是什么意思?您是否以root身份运行它?您能吗? - sarnold
控制台输出:信息 - socket.io已启动, 警告 - 发生错误:Error: EACCES,权限被拒绝 - Jenan
2
运行命令作为“root”将会解决问题,但这会使您的站点非常不安全。正确的解决方案是使用反向代理,然后将目录绑定到端口3000,例如"mydomain.com/app"。 - adelriosantiago
1
在端口80上运行您的node.js服务器应用程序并不被认为是安全的。 - ConfusedDeer
显示剩余2条评论

13
如果你想像你所描述的那样在“没有端口”的情况下运行它,实际上你将会在80端口上运行它。你不能在没有root权限的情况下这样做。
因此,你需要在命令前加上sudo以获取root权限:

node server.js

你需要

sudo node server.js

假设您在尝试运行它的机器上拥有sudo权限。否则,您将遇到EACCESS问题。这就是sarnold试图告诉您的内容。


如何在Windows系统中运行 - Trojan
下投票,因为在端口80上运行您的node.js应用程序被认为是不安全的。 - ConfusedDeer

11

因为我也使用apache,所以我是这样做的,我不能使用端口80,因为它被占用了。所以,我设置了一个代理。我设置我的/src文件夹被忽略。

<VirtualHost *:80>
    DocumentRoot "/Library/WebServer/Documents/www.mysite.com"
    ServerName local.www.mysite.com
    ServerAlias local.www.mysite.com
    ProxyPass /src !
    ProxyPass / http://local.www.mysite.com:3000/
    ProxyPassReverse / http://local.www.mysite.com:3000/
</VirtualHost>

你好,我想做完全相同的事情,但失败了。在错误日志中,它说[Fri Nov 29 18:45:45 2013] [error] (111)Connection refused: proxy: HTTP: attempt to connect to my.IP.addr.0:3000 (www.mydomainname.com) failed。你正在使用哪个代理模块(http、ftp、ajp等)? - Boyang
嗨,查尔斯 - 我正在使用默认的Apache代理设置。我改变的唯一一件事是在我的虚拟主机中使代理工作的这个部分。我的Apache配置已经加载了所有代理模块。而且Apache正在我的配置中监听端口80。你没有加载任何模块吗? - Anna

3

首先,你可能希望从本地主机“127.0.0.1”运行应用程序。你可以通过在node.js设置中省略端口来删除端口。默认情况下,Web浏览器会在端口80上寻找服务器。如果出于某种原因你想让服务器运行在端口3000上,则必须将其包含在URL中。


没有解决方案吗?必须将应用程序设置为在此端口上运行,而不带URL。 - Jenan
抱歉,我误解了。我不认为有一种方法可以在不将其包含在URL中的情况下在端口3000上运行。不过我可能是错的。 - feralcreature

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接