这是一个简单的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结果?请教我。谢谢。兵兵。
发布于 2017-07-30 17:59:08
cPanel通常运行Apache或其他在所有cPanel/unix帐户之间共享的web服务器。web服务器在端口80上监听。根据请求URL中的域名,web服务器使用“虚拟托管”来确定哪个cPanel/unix帐户应该处理请求,即在哪个主目录中查找要服务的文件和要运行的脚本。如果URL仅包含IP地址,则cPanel必须默认为cPanel帐户之一。
通常,如果没有根访问,由cPanel帐户运行的作业不能在端口80上侦听。实际上,可用的端口可能具有相当大的限制性。如果8080不起作用,你可以试试60000。要访问正在运行的node.js服务器,您需要有它正在监听的端口号。因为这是在该服务器上侦听该端口的唯一工作,所以您应该能够将浏览器指向任何cPanel帐户的域名,甚至是服务器的IP地址,从而将端口号添加到URL中。但是,运行cPanel作业的node.js帐户通常使用域名,例如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指令- rewrite.html
A2Hosting.com知识库关于配置Node.js - https://www.a2hosting.com/kb/installable-applications/manual-installations/installing-node-js-on-managed-hosting-accounts的文章
cPanel特性请求线程用于node.js支持- https://features.cpanel.net/topic/nodejs-hosting
相关的StackOverflow问题
发布于 2018-11-23 07:28:30
用NodeJS安装/安装CPanel
1.使用SSH登录到您的帐户(如果没有为您的帐户启用它,请与支持小组联系)。
2.下载Node.js
wget https://nodejs.org/dist/latest/node-v10.0.0-linux-arm64.tar.xz
3.解压Node.js文件
tar xvf node-v10.0.0-linux-arm64.tar.xz
4.现在将文件夹重命名为"nodejs“。为此,请键入以下命令
mv node-v10.0.0-linux nodejs
5.现在要安装节点和npm二进制文件,输入以下命令:
mkdir ~/bin <br> cp nodejs/bin/node ~/bin
cd ~/bin
ln -s
../nodejs/lib/node_modules/npm/bin/npm-cli.js npm
6. Node.js和npm安装在您的帐户上。要验证这一点,请输入以下命令
节点--版本npm --版本
The ~/bin directory is in your path by default, which means you can run node and npm from any directory in your account.
7.启动Node.js应用程序
nohup node my_app.js &
8.停止应用程序
pkill node
9.将Node.js应用程序与web服务器集成(可选)
根据您正在运行的Node.js应用程序的类型,您可能希望能够使用web浏览器访问它。为此,您需要为Node.js应用程序选择要侦听的未使用的端口,然后定义服务器重写规则,将访问者重定向到应用程序。
在文本编辑器中,将以下行添加到/home/ username /public_html目录中的.htaccess文件中,其中username表示您的帐户用户名:
RewriteEngine On
RewriteRule ^$ http://127.0.0.1:XXXXX/ [P,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://127.0.0.1:XXXXX/$1 [P,L]
在两个RewriteRule行中,用Node.js应用程序侦听的端口替换XXXXX。要在托管服务器上运行Node.js应用程序,必须选择一个未使用的端口,端口号必须在49152到65535之间(包括在内)。保存对.htaccess文件的更改,然后退出文本编辑器。您网站的访问者将被重定向到侦听指定端口的Node.js应用程序。
如果应用程序启动失败,您选择的端口可能已经在使用。检查应用程序日志中是否存在诸如EADDRINUSE之类的错误代码,这些错误代码表明端口正在使用。如果是,请选择不同的端口号,更新应用程序的配置和.htaccess文件,然后再试一次。
发布于 2020-09-06 14:24:00
是的--这是可能的,但它几乎没有依赖项,无论是您的cpanel宿主提供商还是您选择的计划,都不支持它。
下面的步骤,我提到的只是一个演示的目的。如果你是一个学生,或者只是想玩它,你可以尝试它。我不是一个安全专家,所以从安全的角度来看,我真的不知道它有多好。
这么说,让我们看看我是如何配置它的。我有hostinger托管订阅,以下是步骤:
启用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
命令确认这一点,如下图所示。
此时,您可以检查如下所示的版本
正如您所看到的,对于节点命令,它是可以的,但是对于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支持。问题是它将在本地托管在我将要给出的端口上。请检查下面的示例:
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)
这里的问题是,即使它将执行,我将无法通过网络访问它。这是因为我们只得到固定的预定义端口(比如80,21,3306等等)。在共享cpanel机器上允许/打开的。由于这个原因,我托管的特快应用程序只能在本地49876 port
上使用。
让我们看看我们有什么
因此,我们可以使用带有重定向规则集和卷曲的php来弥合差距。以下是我为使其发挥作用所做的改变:
In .htaccess file
添加了一个重定向规则,比如域/ api就是我想要的rest路径。
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上的数据库提供了基于表达式的rest支持、承载的database和mysql。
https://stackoverflow.com/questions/44079039
复制相似问题