这是一个简单的 node.js 代码。
var http = require('http');
http.createServer(function(req, res) {
res.writeHead(200, { 'Content-Type' : 'text/plain'});
res.end('Hello World!');
}).listen(8080);
我将它上传到 cpanel 托管服务器并安装了 node.js 并运行它。如果服务器是普通服务器,我可以通过访问“http://{serverip}:8080”来检查脚本结果。但是在 cpanel 上托管域和子域,并且每个域都与每个站点匹配。即使 http://{serverip} 也不是有效的 url。如何访问我的 node.js 结果?请教我。谢谢。冰冰。
原文由 bb14816 发布,翻译遵循 CC BY-SA 4.0 许可协议
cPanel 通常运行 Apache 或其他在所有 cPanel/unix 帐户之间共享的 Web 服务器。 Web 服务器侦听端口 80。根据请求 URL 中的域名,Web 服务器使用“虚拟主机”来确定哪个 cPanel/unix 帐户应该处理请求,即在哪个主目录中找到要服务的文件和要运行的脚本。如果 URL 仅包含 IP 地址,则 cPanel 必须默认为 cPanel 帐户之一。
通常,如果没有 root 访问权限,由 cPanel 帐户运行的作业无法侦听端口 80。实际上,可用端口可能非常有限。如果 8080 不起作用,您可以尝试 60000。要访问正在运行的 node.js 服务器,您需要知道它正在侦听的端口号。由于这是在该服务器上侦听该端口的唯一工作,因此您应该能够将浏览器指向任何 cPanel 帐户的域名,甚至是服务器的 IP 地址,并将端口号添加到 URL。但是,通常使用运行 node.js 作业的 cPanel 帐户的域名,例如 http://cPanelDomainName.com:60000/ 。
当然,80 端口是 Web 服务的默认端口,而且很少有用户熟悉 URL 中的可选端口号。为了让用户更轻松,您可以使用 Apache 将端口 80 上的请求“反向代理”到 node.js 进程正在侦听的端口。这可以在配置或 .htaccess 文件中使用 Apache 的 RewriteRule 指令来完成。这种请求的反向代理可以说还有其他好处,例如,Apache 可能是面向公共 Internet 的更安全、可靠和可管理的前端。
不幸的是,node.js 的这种设置并没有得到所有网络托管公司的认可。 A2Hosting.com 是一家支持它的托管公司,即使是在其廉价的共享托管产品上也是如此。他们的知识库中还对设置过程进行了清晰的书面描述。
最后,值得注意的是,cPanel 的开发人员正在开发内置的 node.js 支持。 “如果所有的星星都对齐,我们可能会在第 68 版看到这片土地,”即可能在 2018 年初。
参考
Apache 虚拟主机 - http://httpd.apache.org/docs/2.4/vhosts/
Apache RewriteRule 指令 - http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html
A2Hosting.com 关于配置 Node.js 的知识库文章 - https://www.a2hosting.com/kb/installable-applications/manual-installations/installing-node-js-on-managed-hosting-accounts
用于 node.js 支持的 cPanel 功能请求线程 - https://features.cpanel.net/topic/nodejs-hosting
相关 StackOverflow 问题
如何在共享主机中托管 Node.Js 应用程序
为什么 node.js 不能在共享主机上运行?