【问题标题】:Does a node.js application have to listen on a port?node.js 应用程序是否必须侦听端口?
【发布时间】:2017-11-22 00:56:43
【问题描述】:

我在使用 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 中做到这一点吗?

【问题讨论】:

标签: node.js ssh port


【解决方案1】:

所有服务器进程都必须监听一个端口。

当您看到像 http://www.example.com 这样的 URL 时,有一个隐含的端口。如果协议是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?

【讨论】:

  • @CraigMitchell - 您的主机会将向您的域发出的传入端口 80 请求重定向到您的 node.js 服务器吗?这就是你需要的。而且,您的主机是否允许长时间运行 node.js 服务器?
  • 我注意到它说EACCES 0.0.0.0:443 所以它说服务器是0.0.0.0?这就是发生此错误的原因吗?
  • @CraigMitchell - 你有没有尝试Google "EACCES nodejs. server"。如果你这样做了,你很快就会发现在低于 1024 的任何端口上启动服务器都需要提升权限,如果他们没有正确的权限,这是一个典型的错误。
猜你喜欢
  • 1970-01-01
  • 2017-06-29
  • 1970-01-01
  • 2014-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-03
  • 1970-01-01
相关资源
最近更新 更多