它是一个简单的node.js代码.
var http = require('http');
http.createServer(function(req, res) {
res.writeHead(200, { 'Content-Type' : 'text/plain'});
res.end('Hello World!');
}).listen(8080);
Run Code Online (Sandbox Code Playgroud)
我将它上传到cpanel托管服务器并安装了node.js并运行它.如果服务器是普通服务器,我可以通过访问'http:// {serverip}:8080'来检查脚本结果.但是在cpanel上托管域和子域,每个域都匹配每个域.甚至http:// {serverip}也不是有效的网址.如何访问我的node.js结果?请教我.谢谢.冰冰.
aap*_*aap 22
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可能是面向公共互联网的更安全,可靠和可管理的前端.
不幸的是,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
Mat*_*jra 19
1.使用SSH登录您的帐户(帐户联系支持团队未启用).
2.下载NodeJS
wget https://nodejs.org/dist/latest/node-v10.0.0-linux-arm64.tar.xz
3.解压缩NodeJS文件
tar xvf node-v10.0.0-linux-arm64.tar.xz
4.现在将文件夹重命名为nodejs name,以执行此操作,键入以下命令
mv node-v10.0.0-linux nodejs
5.现在安装node和npm二进制文件,键入下一个命令:
mkdir~/bin
cp nodejs/bin/node~/bin
cd~/bin
ln -s ../nodejs/lib/node_modules/npm/bin/npm-cli.js npm
6.您的帐户上安装了Node.js和npm.要进行验证,请键入以下命令
node --version
npm --version
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节点my_app.js&
8.停止申请
pkill节点
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]
Run Code Online (Sandbox Code Playgroud)
在两个RewriteRule行中,将XXXXX替换为Node.js应用程序侦听的端口.要在受管服务器上运行Node.js应用程序,必须选择未使用的端口,并且端口号必须介于49152和65535之间(包括端点).将更改保存到.htaccess文件,然后退出文本编辑器.您网站的访问者将被重定向到侦听指定端口的Node.js应用程序.
如果您的应用程序无法启动,您选择的端口可能已在使用中.检查应用程序日志中是否有错误代码(如EADDRINUSE),指示端口正在使用中.如果是,请选择其他端口号,更新应用程序的配置和.htaccess文件,然后重试.
YJD*_*Dev 10
是的,这是可能的,但它几乎没有依赖项,您的 cpanel 托管提供商或您选择的计划可能支持或不支持这些依赖项。
我提到的以下步骤仅用于演示目的。如果你是学生或者只是想玩一下,可以尝试一下。我不是安全专家,所以从安全角度来看我真的不知道它有多好。
话虽如此,让我们看看我是如何配置它的。我有托管商 cpanel 托管订阅,步骤如下:
启用 SSH 访问
通过 ssh 连接到共享机器
检查您的 Linux 发行版并下载和设置 Node 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
Run Code Online (Sandbox Code Playgroud)
这将下载并提取节点并创建一个目录。您可以使用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
Run Code Online (Sandbox Code Playgroud)
此外,我们可以创建别名,让生活变得更轻松
检查下面的图片:
I tried using bashrc/bash_profile but somehow it didn't work .
这就是在共享 cpanel 机器上运行的所有节点服务器。
现在我想在这种情况下有一个基于 Express 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)
Run Code Online (Sandbox Code Playgroud)
这里的问题是即使它会执行我也无法通过网络访问它。这是因为我们只能获得共享 cpanel 计算机上允许/打开的固定预定义端口(如 80、21、3306 等)。因此,我托管的 Express 应用程序只能在本地使用49876 port。
让我们看看我们有什么:
因此,我们可以利用带有重定向规则集的 php 和 curl 来弥补这一差距。以下是我为使其发挥作用所做的更改:
In .htaccess file添加重定向规则,假设域/api 是我想要的其余 api 路径。
RewriteRule api/(.*)$ api/api.php?request=$1 [QSA,NC,L]
Run Code Online (Sandbox Code Playgroud)
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);
?>
Run Code Online (Sandbox Code Playgroud)
And on the ssh prompt just run the app.js file
node api/app.js
Run Code Online (Sandbox Code Playgroud)
以下是此操作的实际操作图像:
这是我在我的程序中提到的类似的东西,所以我们也可以通过 php 本身进行这个节点调用。
现在,我在 cpanel 上拥有基于 Express 的 Rest API 支持、托管的 Angular 应用程序和用于数据库的 mysql。
您可以使用指向该 cPanel 服务器的任何域,而不是访问http://server-ip:8080尝试访问http://domain.tld:8080。默认情况下,cPanel 不绑定端口 8080。请务必检查服务器上是否有任何防火墙。如果是,则允许 tcp 端口 8080 上的传入连接。根据您的 WHM 服务器配置,它也应该与http://server-ip:8080 一起使用