将nodejs项目部署到阿里云ESC服务器,linux系统配置80端口,实现公网IP访问

nodejs项目部署

购买阿里云ECS服务器,配置系统CentOS7.3,

默认已经安装好了nodejs,以及搭建好了ftp服务器用于上传程序代码.
若没有则按下面两篇博文进行环境搭建
1. linux系统下安装nodejs并配置全局变量
2. linux系统下搭建ftp服务器

用于测试的Nodejs服务

本地新建server.js文件,创建一个http服务,监听0.0.0.0,监听端口80。针对请求响应一段文本”Hello Aliyun Node.js,hah”。

为啥要监听IP:
提供网络服务的软件,通常都可以指定绑定到某个IP地址上,而不让其他网络过来的请求访问这个服务,当然也可以不指定IP,为任何网络的请求提供同样的服务

127.0.0.1是什么鬼

127.0.0.1是回送地址,指本地机,一般用来测试使用。回送地址(127.x.x.x)是本机回送地址(Loopback Address),即主机IP堆栈内部的IP地址,主要用于网络软件测试以及本地机进程间通信,无论什么程序,一旦使用回送地址发送数据,协议软件立即返回,不进行任何网络传输。

了该了127.0.0.1是什么鬼之后,如果server.js里面监听的IP是127.0.0.1,那坑定是不可能通过公网IP进行访问.
学习的时候,常常看到教程里面的代码监听的都是介个IP,那只是用来本机测试……

0.0.0.0又是什么鬼
0.0.0.0这个IP,他可以代表本机的所有IP地址

在服务器中,0.0.0.0指的是本机上的所有IPV4地址,如果一个主机有两个IP地址,192.168.1.1 和 10.1.2.1,并且该主机上的一个服务监听的地址是0.0.0.0,那么通过两个ip地址都能够访问该服务。
在路由中,0.0.0.0表示的是默认路由,即当路由表中没有找到完全匹配的路由的时候所对应的路由。
一个主机为啥可能会有两个IP
服务器基本上都不止一个IP,IDC机房为了管理和安全上的考虑,一台服务器至少两块网卡,一个用于内部管理,一个用于对外提供服务。
所以我在阿里云ECS实例里面看到的公网IP和私有IP,俩个IP就是这么来的?
这里有一篇转载的博文讲127.0.0.1和0.0.0.0区别的博文


//server.js

var http = require('http');

http.createServer(function(req,res){
    res.writeHead(200,{'Content-Type':'text/plain'});
    res.end('Hello Aliyun Node.js,hah\n');
}).listen(80,"0.0.0.0");
//嗯,想实现公网IP访问的条件之一,监听这个0.0.0.0就对了
//具体原理待再深究

使用ftp客户端,把server.js 文件上传到服务器

不了解ftp服务器的看上面提到的 linux系统下搭建ftp服务器 这篇博文

跑去阿里云服务器控制台配置安全组规则

安全组规则是什么鬼

授权安全组规则可以允许或者禁止与安全组相关联的 ECS 实例的公网和内网的入方向和出方向的访问。
阿里云安全组应用案例文档

将nodejs项目部署到阿里云ESC服务器,linux系统配置80端口,实现公网IP访问_第1张图片
上面的server.js监听的是80端口,所以要去为80端口配置一个安全组规则,允许公网的入方向可以通过80端口访问server.js提供的http服务.

80端口是为HTTP(HyperText Transport Protocol)即超文本传输协议开放的,浏览器HTTP访问IP或域名的80端口时,可以省略80端口号

还木有完,还有防火墙这一关

你以为server.js的监听IP写对了,安全组规则配置对了就可以愉快地node server.js 然后用公网IP进行访问了么?年轻……

安全组和防火墙的区别
网友回答说二者的应用层次不同
安全组可以理解为网络层次的
防火墙是系统层次的

首先看下防火墙服务有木有运行

firewall-cmd --state

这里写图片描述

如果你看到的是not running ,恭喜你,你阔仪切换当前工作目录到server.js所在目录然后node server.js
这里写图片描述

如果你看到的是running ,说明防火墙服务已经开启.肿么办?我对linux 系统不熟悉啊,我不想使用防火墙

关闭防火墙

systemctl stop  firewalld

如果关闭了防火墙还不可以,便查看一下80端口是否被其他程序占用”netstat -pan | grep :80”,若占用要么杀死占用80端口的进程kill pid,要么重新监听一个端口

我们是这种不思进取,采用关闭防火墙就完事的人么?不是!防火墙没开,也要给它开起来

打开防火墙

systemctl start firewalld

查看防火墙开放的端口

firewall-cmd --list-port

这里写图片描述
啥也木有说明 防火墙没有开放80端口

防火墙开放80端口

firewall-cmd --zone=public --add-port=80/tcp --permanent
systemctl restart firewalld   # 重启防火墙服务使新配置生效
firewall-cmd --list-port      #重新查看开放的端口

这里写图片描述

ok 防火墙这一关过了

等等!刚刚都是防火墙的命令行,配置的开放端口的规则写在什么文件里了?
在/etc/firewalld 文件夹里,

查看用户配置好的防火墙端口规则

cat /etc/firewalld/zones/public.xml

将nodejs项目部署到阿里云ESC服务器,linux系统配置80端口,实现公网IP访问_第2张图片

启动服务

切换当前工作目录到server.js所在目录然后node server.js
这里写图片描述
将nodejs项目部署到阿里云ESC服务器,linux系统配置80端口,实现公网IP访问_第3张图片

成功! ,如果你还没有买域名或者域名还没备案,可以直接在地址栏输入你的阿里云服务器实例相关的公网IP进行访问.

完婶了么? 直接 node server.js 后发现 linux系统界面使用不了其他命令了,只能ctrl+c终止server.js服务——是时候介绍pm2模块

.
pm2官网
.
看看大神怎么介绍pm2模块的……你所不知道的pm2
哦呦,大神的文章配的图肿么看起来好看多了…….

安装pm2模块

npm i -g pm2

切换当前工作目录到server.js所在目录然后pm2 start server.js

pm2 start server.js

将nodejs项目部署到阿里云ESC服务器,linux系统配置80端口,实现公网IP访问_第4张图片

这里之所以使用npm安装好pm2模块后 就可以全局使用pm2
是因为我把nodejs相关bin目录配置到了全局变量PATH里,
没配置过的,可以看我之前写的博文 linux系统下安装nodejs并配置全局变量

可以干点别的事情了~

看一下都有哪些服务在工作

ps -aux

这里写图片描述
只看node服务


ps -aux | grep node

这里写图片描述

linux系统的各种命令…….姑且需要啥就去百度啥好了,哈哈哈

关闭server.js

pm2 stop server.js

结语: 当年姐姐(对,就是姐姐)也是看过网络技术教材的人….这个IP那个IP曾经感觉6的不行。时过4年,配置个安全组就,就,就整蒙了,这都是些神马,!#W@ER,看不大懂啊。还好最近开窍,知道花个几百元买个阿里云服务器来折腾,结束了这种服务器神秘感……哈哈哈,继续努力


你可能感兴趣的:(nodejs,linux,linux,nodejs,pm2,firewalld,阿里云服务器)