本博客阿里云配置过程(三)怎么让我们的Node应用跑起来

原理部分

这次直接上原理啦!

首先要明确一点,Node本身自带了http之类的模块,它自己可以处理http请求,也就是说Node本身就是一个服务器。而服务器需要监听机器的一个端口,当外界请求这个服务器的这个端口的时候,Node才会接收到相应的请求并作出回应。

当我们在浏览器中输入ip地址或者域名dns解析的时候,是发送的http请求,在服务器上,负责处理HTTP请求的是80端口,请求会默认发送到80端口。然而80端口默认是被占用的,想要监听1024之前的端口要拿root权限出来。如果硬要让Node拿root权限去监听80端口,付出的代价(牺牲了安全性等等)是不值得的。

那就只能让Node监听3000之类端口,然后访问的时候只能这样输入www.xxx.com:3000才能访问吗?

肯定不是的!

我们可以触类旁通下。那么其它的语言是怎样解决的呢?举个例子,php自身跑在Apache、Nginx之类的服务器上,服务器负责监听80端口,接收http请求转给php。。

所以,我们可以用这样的服务器来监听80端口,再将请求转发给Node!但有一点不一样:php之类是依托于服务器的,配置下路径之类就可以收到请求,而Node独立自主,就要对服务器进行下配置,让其转发80端口的请求到Node监听的3000端口就可以了。

还有一个问题:在本地运行Node程序时,使用node app.js之类的命令启动程序后,当你退出命令行后Node就会结束进程(╯‵□′)╯︵┴─┴ 。这时候就需要一个工具,创建一个后台服务,将Node跑在这个后台服务上就可以啦!

接下来跟我一步一步做!

安装各个需要的东西

安装Nginx

下面以我的CentOS7为例。首先,我是买的空镜像。要是你买的上面带了Nginx咋办捏?

$ find -name nginx

要是有了,版本差不多,就过了这儿吧。没有或者想换个版本的往下走:

先进入/usr/local目录

$ cd /usr/local

下载新版的Nginx

$ wget http://nginx.org/download/nginx-1.7.4.tar.gz #这里自己换地址哈

解压

$ tar -zxvf nginx-1.7.4.tar.gz

进入解压后的目录

$ cd nginx-1.7.4

编译并安装

$ ./configure
$ make && make install

如果没有报错,就完成了。可以看下版本:

$ nginx -v

可以看下nginx安装目录在哪里:

$ whereis nginx

要是你报错了,可以在下面留言告诉我。

安装forever/pm2

Node当然有人提供了让Node程序跑在后台的工具,那就是forever。当然现在出了个更好的,叫pm2。反正都是用npm安装,就只介绍更简单的forever吧,想用pm2的自己查查,差不多。

上期已经讲过了npm到底是个啥了,这里直接用:

$ npm install forever -g #全局安装

然后我们进入项目文件夹。我用express写的,所以入口文件是bin目录下的www文件。于是运行

$ forever start ./bin/www

如果想关闭呢,就这样

$ forever stop ./bin/www

如果你有了修改,想要重启服务,就这样

$ forever restart ./bin/www
$ forever restartall #没有空格!重启所有

如果你想看日志,那在start的时候这样

$ forever start -l forever.log -o out.log -e err.log ./bin/www  #分别是forever的log,node程序输出的log和错误log

如果你想看forever上都跑了哪些程序,这样

$ forever list

其他的自己查,就不一一枚举啦。

目前来说,你在访问你的域名时会进入到nginx的欢迎页面,在域名后面加上Node监听的端口就会跳到你的Node网站了。如果不是,先查资料,看报错调试,不行的话,请联系我。

配置

接下来就要配置下Nginx,把80端口的请求转到Node那里了,对了,这个叫做反向代理

进入你的Nginx目录,找到nginx.conf配置文件,打开,在其后面添加如下配置:

upstream nodejs{
   server 127.0.0.1:3000;  #负载均衡模块
}
server {
    listen       80 default_server;  #默认监听80端口
    listen       [::]:80 default_server;
    server_name  www.kinice.top kinice.top;  #我们的域名,nginx会帮忙解析该域名
    root         /usr/share/nginx/html;

    include /etc/nginx/default.d/*.conf; # 加载默认配置文件

    location / {  #下面就是反向代理的配置,“/”代表上面域名的根
        proxy_pass http://127.0.0.1:3000;
        proxy_redirect off;
        proxy_http_version 1.1;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 300s;
    }
    #下面是错误页面配置
    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}

接着保存然后重启Nginx,再访问你的域名,就会直接跳到Node上了!

这样一来,你的Node程序就可以正式跑在你的服务器上了,也就是你有一个自己的网站了o(*≧▽≦)ツ┏━┓



评论

koimoji

thanks and learn it so much

2017-1-13 15:13

在这里输入