• 腾讯云下安装 nodejs + 实现 Nginx 反向代理


    本文将介绍如何给腾讯云上的 Ubuntu Server 12.04 LTS 64位主机安装 node 及 nginx,并简单配置反向代理。

    笔者在整个安装过程中遇到不少麻烦(不赘述),如果你希望少踩坑,可以按本文的步骤进行安装部署。

    一. 新版 nodejs 安装

    这里强烈推荐使用 nvm (Node版本管理器),其它方式的安装或多或少都有些问题。

    具体步骤如下:

    1. 通过 git 指令下载nvm

    执行指令如下,我们把nvm下载到 /root/git/ 中去(记得要先安装 git)

    [root@VM-22-180-ubuntu~]#pwd
    /root
    [root@VM-22-180-ubuntu~]#mkdir git
    [root@VM-22-180-ubuntu~]#cd git
    [root@VM-22-180-ubuntu~]#git clone https://github.com/creationix/nvm.git

    2. 配置环境变量

    这里是要修改 .bashrc 文件,如果不清楚其位置,可以回到根目录执行

    #find . -name "*.bashrc" -print

    来搜索和获取结果:

    然后通过 vim 修改 ./etc/skel/.bashrc 文件,在文件开头加入下面两行:

    export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node
    source /git/nvm/nvm.sh

    其中第一行是修改nvm镜像路径到阿里,第二行才是把 nvm 添加到系统环境中去。

    保存后执行指令让配置生效(或者重启服务器)

    #source .bashrc 

    3. 直接用nvm安装nodejs

    执行指令

    #nvm install node

    便可安装新版本的nodejs,安装成功后,最新版的node就装在服务器上了:

    二. 安装 nginx

    这里和node一样不推荐使用 apt-get/aptitude 形式安装,建议走源码编译安装。

    1. 依赖安装和下载

    确保安装了 gcc-c++  和 libpcre3-dev:

    #aptitude install gcc-c++  libpcre3-dev

    然后咱定位到 /home/ubuntu 去下载一些依赖包,并解压缩到该文件夹下:

    #wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.38.tar.gz
    #wget http://prdownloads.sourceforge.net/libpng/zlib-1.2.8.tar.gz
    #wget https://www.openssl.org/source/openssl-1.1.0c.tar.gz
    
    #tar -xzvf pcre-8.38.tar.gz
    #tar -xzvf zlib-1.2.8.tar.gz
    #tar -xzvf openssl-1.1.0c.tar.gz

    这里咱们下载的是 nginx 模块所依赖的 pcre/zlib/openssl,压缩包的下载地址都是在它们对应官网中找到的。

    需要留意的点是,pcre 不要下载使用 pcre2 的,否则会导致 nginx 编译过程报错:

    推荐使用上方代码段提供的 pcre-8.38 版本。

    留意下,如果在终端下载的速度太慢了,推荐用迅雷下载在本地后,再通过 FileZilla 把文件同步到云主机上去,百试不爽~

    2. 下载和解压 nginx 

    先到nginx官网找最新的源码包下载路径(截止本文时间,稳定版是 http://nginx.org/download/nginx-1.10.2.tar.gz),然后下载下来(我个人是下载到 /root 路径下)

    [root@VM-22-180-ubuntu~]#cd
    [root@VM-22-180-ubuntu~]#pwd
    /root
    [root@VM-22-180-ubuntu~]#wget http://nginx.org/download/nginx-1.10.2.tar.gz

    然后解压此压缩包,并进入到文件夹 /nginx-1.10.2 去:

    [root@VM-22-180-ubuntu~]#tar -xzvf nginx-1.10.2.tar.gz
    [root@VM-22-180-ubuntu~]#cd nginx-1.10.2

    3. 编译和安装

    按顺序执行如下三条指令:

    #./configure --prefix=/home/ubuntu/nginx --with-pcre=/home/ubuntu/pcre-8.38 --with-zlib=/home/ubuntu/zlib-1.2.8 --with-openssl=/home/ubuntu/openssl-1.1.0c --with-http_ssl_module
    
    #make
    
    #make install

    它们的作用分别是:生成C源码文件和Makefile文件、生成二进制文件、将nginx安装到指定目录(/home/ubuntu/nginx)

    注意 ./configure 指令后的参数分别指定了 nginx 的安装目录及相关依赖模块地址。

    自此,nginx 就安装完毕啦~

    三. 启动 nginx

    执行 

    #/home/ubuntu/nginx/sbin/nginx

    可直接启动 nginx 服务,这时候在任意地方执行:

    wget http://127.0.0.1

    都可以下载到一份 index.html:

    这时候我们直接访问云主机公网 ip 地址,就能直接看到该默认页面:

    注意!如果这时无法通过公网ip访问页面,请确保云主机所处的安全组是允许所有端口访问的。

    四. 执行一个node服务,并通过 nginx 配置实现反向代理

    这里我们简单实现一个 node 页面,监听3000端口。

    我们在本地先写一个 index.js 文件来耍一耍:

    const http = require('http');
    
    const server = http.createServer((req, res) => {
        res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    res.end('Hello World
    ');
    });
    
    server.listen(3000, () => {
        console.log(`node server is now running/`);
    });

    执行 node index 的话,访问 http://localhost:3000/ 会有“Hello World”的输出:

    然后咱们把这个文件放到云主机去。

    鉴于我已经挂到 github上,读者们可以直接通过如下指令来下载该文件:

    #git clone https://github.com/VaJoy/node-test.git

    p.s. 我个人下载到了“/root/node-project/”文件夹下,要执行node的话指令为:

    #node /root/node-project/node-test/cp1/index

    OK,咱们接着先修改 nginx 配置。如果你忘了 nginx 的配置在哪里,可以执行这条指令来确定:

    #/home/ubuntu/nginx/sbin/nginx -t

    本文的nginx是安装在 /home/ubuntu 下的,所以其配置文件路径是“/home/ubuntu/nginx/conf/nginx.conf”,我们这样编辑它(加上红框部分的代码)

    这意味着当有请求路径为“/hello”时,nginx 会将请求代理到服务器的3000端口去(即node监听的端口)

    五. 重启 nginx 和 node

    到这一步的时候别忘了两点 —— 1. 咱们修改 nginx 配置后还没重启nginx服务;2. 咱们还没有在云主机上跑node服务(上文仅仅是在本地电脑上跑了一次)

    所以我们分别执行如下指令(重启nginx+跑node)

    #/home/ubuntu/nginx/sbin/nginx -s reload
    
    #node /root/node-project/node-test/cp1/index

    这时候直接访问 http://公网ip/hello,就能直接看到node跑起来的页面内容了:

    本文送给使用腾讯云的前端童鞋,若操作过程遇到问题欢迎留言咨询。共勉~

  • 相关阅读:
    css兼容性大坑
    JS获取元素CSS值
    calendar的一些操作
    java日期工具类
    redis的一些操作
    webstorm ES6 转 ES5
    基于时间的动画算法
    3434
    MySQL登陆知识
    MySQL密码知识点
  • 原文地址:https://www.cnblogs.com/vajoy/p/6084079.html
Copyright © 2020-2023  润新知