在 cpanel 托管服务器上运行 node.js

新手上路,请多包涵

这是一个简单的 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 许可协议

阅读 541
2 个回答

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 不能在共享主机上运行?

原文由 aap 发布,翻译遵循 CC BY-SA 3.0 许可协议


_是的,这是可能的_,但它几乎没有依赖项,您的 cpanel 托管服务提供商或您选择的计划可能支持也可能不支持。

我提到的以下步骤仅用于演示目的。如果您是学生或只是想玩它,您可以尝试一下。我不是安全专家,所以从安全的角度来看,我真的不知道它有多好。


话虽如此,让我们看看我是如何配置它的。我有托管 cpanel 托管订阅,以下是步骤:

启用 SSH 访问

主机 cpanel 中的 ssh 访问

在此处输入图像描述

通过 ssh 连接到共享机器

在此处输入图像描述

在此处输入图像描述

检查您的 linux 发行版并下载和设置节点 js

在我的情况下,以下是用于此的命令:

 Downloading node & extracting it using curl
curl https://nodejs.org/dist/v12.18.3/node-v12.18.3-linux-x64.tar.gz |tar xz

在此处输入图像描述在此处输入图像描述

这将下载并提取节点并创建一个目录。您可以确认使用 ls 命令,如下图所示。

在此处输入图像描述

此时您可以查看如下所示的版本

在此处输入图像描述

如您所见,对于 node 命令没关系,但是对于 npm 命令,我们对其进行了如下修改

./node-v12.18.3-linux-x64/bin/node ./node-v12.18.3-linux-x64/lib/node_modules/npm/bin/npm-cli.js --version

在此处输入图像描述

此外,我们可以创建别名以使生活更轻松

检查下面的图片:

在此处输入图像描述

在此处输入图像描述

I tried using bashrc/bash_profile but somehow it didn't work .

这就是在共享 cpanel 机器上运行的所有节点服务器。


现在我想在这种情况下有一个基于快速 js 的 rest api 支持。问题在于它将在本地托管在我将提供的端口上。检查以下示例:

 var express=require('express')

var app=express()

app.get('/', function (req, res) {
    res.send('hosting node js base express api using php & shared hosting a great way to start yjtools')
  })

console.log("listening yjtools node server on port 49876...")
app.listen(49876)

这里的问题是即使它会执行,我也无法通过网络访问它。这是因为我们只获得了在共享 cpanel 机器上允许/打开的固定预定义端口(如 80、21、3306 等)。因此,我托管的 express 应用程序只能在 49876 port 上本地使用。

让我们看看我们有什么:

  • 在 cpanel 机器上本地托管的基于快速 js 的应用程序。
  • 基于 PHP 的托管 Apache 服务器可通过 http/https 获得。

所以我们可以使用带有重定向规则集和 curl 的 php 来弥补差距。以下是我为使其正常工作所做的更改:

In .htaccess file 添加重定向规则,说 domain/api 是我想要我的 rest api 路径。

 RewriteRule api/(.*)$ api/api.php?request=$1 [QSA,NC,L]

In the api/api.php file (这是我选择的路径你可以选择任何路径)

   <?php
echo "Hello ".$_REQUEST['username'];

echo '<hr>';

$curl = curl_init('http://127.0.0.1:49976/');
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//Get the full response
$resp = curl_exec($curl);
if($resp === false) {
    //If couldn't connect, try increasing usleep
    echo 'Error: ' . curl_error($curl);
} else {
    //Split response headers and body
    list($head, $body) = explode("\r\n\r\n", $resp, 2);
    $headarr = explode("\n", $head);
    //Print headers
    foreach($headarr as $headval) {
        header($headval);
    }
    //Print body
    echo $body;
}
//Close connection
curl_close($curl);
?>

And on the ssh prompt just run the app.js file

 node api/app.js

下面是这个工作的图像:

在此处输入图像描述

在此处输入图像描述

是我为我的程序引用的类似内容,因此我们也可以通过 php 本身进行此节点调用。


现在,我在 cpanel 上拥有基于 express 的 rest api 支持、托管的角度应用程序和用于数据库的 mysql。

原文由 YJDev 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏