node.js应用程序是否必须侦听端口?

时间:2017-11-22 00:56:43

标签: node.js ssh port

我在使用cPanel的共享主机上运行Apache服务器。我在服务器上成功安装了node.js,但问题是我的主机只能打开出站端口,我需要能够通过浏览器sooo访问端口,我想知道我是否不必使用端口?比如这里是我的代码:

const express = require('express');
const req = require('request')

var app = express();
var port = process.env.PORT || 8016;

var server = app.listen(port, () => {
    console.log('Server listening on ' + port);
});

我可以举例说明应用程序不需要端口,它会脱离域而不是像example.com这样的端口吗?就像我想添加一个app.route()一样,我能在public_html中做到这一点吗?

1 个答案:

答案 0 :(得分:1)

所有服务器进程都必须侦听端口。

当您看到http://www.example.com之类的网址时,会有一个默认端口。如果协议是http并且URL中没有端口,则浏览器将自动使用端口80.因此,如果该URL到达服务器,则因为example.com上的服务器正在侦听在端口80上。https的默认端口是443。

  

我可以举例来说,该应用程序不需要端口,它会脱离域而不是像example.com这样的端口

没有。您的应用程序服务器需要侦听端口。正如我上面所说的,如果端口是"默认"那么你可以将端口从URL中删除。对于该协议,任何正在处理URL的人都将自动使用正确的端口。但是,您的服务器仍然必须正在侦听正确的端口。

  

就像我想添加一个app.route(),我能在public_html中做到这一点吗?

我不知道这意味着什么。您不会在HTML文件中添加路由。添加路由将在服务器上的JS文件中完成。

  

我在使用cPanel的共享主机上运行Apache服务器。

您通常无法运行node.js服务器,该服务器直接提供来自该类型托管的传入连接。您需要托管,支持长时间运行的服务器进程,并将传入连接路由到它们。您的提供商可能会提供(在不同的服务级别),或者您可能需要不同的提供商。

有很多方法可以使用Apache作为代理来将传入连接路由到node.js服务器,但这通常不是您可以在共享托管环境中自行配置的。这通常需要更高级别的托管服务。

也可以使用node.js作为Apache的批处理执行环境(有点类似于Apache运行PHP的方式),但是没有运行node.js服务器。每次在Apache中遇到特定路由时,这都是从头开始运行node.js脚本(因此可能不是您想要或正在询问的内容)。

您可能会发现这是一本有用的读物​​:Running Node.js in apache?