腾讯云(ubuntu)下安装 nodejs + 实现 Nginx 反向代理服务器
<p>本文将介绍如何给腾讯云上的 ubuntu server 12.04 lts 64位主机安装 node 及 nginx,并简单配置反向代理。</p>
<p>
笔者在整个安装过程中遇到不少麻烦(不赘述),如果你希望少踩坑,可以按本文的步骤进行安装部署。<br><strong>一. 新版 nodejs 安装</strong></p>
<p>
这里强烈推荐使用 nvm (node版本管理器),其它方式的安装或多或少都有些问题。</p>
<p>
具体步骤如下:</p>
<p>
<strong>1. 通过 git 指令下载nvm</strong></p>
<p>
执行指令如下,我们把nvm下载到 /root/git/ 中去(记得要先安装 git):</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_666768">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain"></code><code class="bash comments">#pwd</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">/root</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash plain"></code><code class="bash comments">#mkdir git</code>
</div>
<div class="line number4 index3 alt1">
<code class="bash plain"></code><code class="bash comments">#cd git</code>
</div>
<div class="line number5 index4 alt2">
<code class="bash plain"></code><code class="bash comments">#git clone https://github.com/creationix/nvm.git</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
<strong>2. 配置环境变量</strong></p>
<p>
这里是要修改 .bashrc 文件,如果不清楚其位置,可以回到根目录执行</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_968583">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash comments">#find . -name "*.bashrc" -print</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
来搜索和获取结果:<img style="max-width:100%!important;height:auto!important;"title="腾讯云(ubuntu)下安装 nodejs + 实现 Nginx 反向代理服务器" alt="腾讯云(ubuntu)下安装 nodejs + 实现 Nginx 反向代理服务器" src="https://zhuji.jb51.net/uploads/img/202305/11b492a5012790265e4f5430c73280f6.jpg"><br>
然后通过 vim 修改 ./etc/skel/.bashrc 文件(不过我个人是上方三个文件都做了同样的修改),在文件开头加入下面两行:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_98838">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash functions">export</code> <code class="bash plain">nvm_nodejs_org_mirror=https:</code><code class="bash plain">//npm</code><code class="bash plain">.taobao.org</code><code class="bash plain">/mirrors/node</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash functions">source</code> <code class="bash plain">~</code><code class="bash plain">/git/nvm/nvm</code><code class="bash plain">.sh</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
其中第一行是修改nvm镜像路径到阿里,第二行才是把 nvm 添加到系统环境中去。</p>
<p>
保存后执行指令让配置生效:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_192339">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash comments">#source .bashrc</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
<strong>3. 直接用nvm安装nodejs</strong></p>
<p>
执行指令</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_270597">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash comments">#nvm install node</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
便可安装新版本的nodejs,安装成功后,最新版的node就装在服务器上了:<img style="max-width:100%!important;height:auto!important;"title="腾讯云(ubuntu)下安装 nodejs + 实现 Nginx 反向代理服务器" alt="腾讯云(ubuntu)下安装 nodejs + 实现 Nginx 反向代理服务器" src="https://zhuji.jb51.net/uploads/img/202305/94a5bf0638ba0c49987045f6221d0156.jpg"><img style="max-width:100%!important;height:auto!important;"title="腾讯云(ubuntu)下安装 nodejs + 实现 Nginx 反向代理服务器" alt="腾讯云(ubuntu)下安装 nodejs + 实现 Nginx 反向代理服务器" src="https://zhuji.jb51.net/uploads/img/202305/01e62b035b244f80f863163e0ddc613a.jpg"><br><strong>二. 安装 nginx</strong></p>
<p>
这里和node一样不推荐使用 apt-get/aptitude 形式安装,建议走源码编译安装。</p>
<p>
<strong>1. 依赖安装和下载</strong></p>
<p>
确保安装了 gcc-c++ 和 libpcre3-dev:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_17998">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash comments">#aptitude install gcc-c++ libpcre3-dev</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
然后咱定位到 /home/ubuntu 去下载一些依赖包,并解压缩到该文件夹下:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_409102">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash comments">#wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.36.tar.gz</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash comments">#wget http://prdownloads.sourceforge.net/libpng/zlib-1.2.8.tar.gz</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash comments">#wget https://www.openssl.org/source/openssl-1.1.0c.tar.gz</code>
</div>
<div class="line number4 index3 alt1">
</div>
<div class="line number5 index4 alt2">
<code class="bash comments">#tar -xzvf pcre-8.36.tar.gz</code>
</div>
<div class="line number6 index5 alt1">
<code class="bash comments">#tar -xzvf zlib-1.2.8.tar.gz</code>
</div>
<div class="line number7 index6 alt2">
<code class="bash comments">#tar -xzvf openssl-1.1.0c.tar.gz</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
这里咱们下载的是 nginx 模块所依赖的 pcre/zlib/openssl,压缩包的下载地址都是在它们对应官网中找到的。</p>
<p>
需要留意的点是,pcre 不要下载使用 pcre2 的,否则会导致 nginx 编译过程报错:<img style="max-width:100%!important;height:auto!important;"title="腾讯云(ubuntu)下安装 nodejs + 实现 Nginx 反向代理服务器" alt="腾讯云(ubuntu)下安装 nodejs + 实现 Nginx 反向代理服务器" src="https://zhuji.jb51.net/uploads/img/202305/76bb47c0116951e7e53c39c5f33bd985.jpg"><br>
推荐使用上方代码段提供的 pcre-8.36 版本。</p>
<p>
留意下,如果在终端下载的速度太慢了,推荐用迅雷下载在本地后,再通过 filezilla 把文件同步到云主机上去,百试不爽~</p>
<p>
<strong>2. 下载和解压 nginx</strong></p>
<p>
先到nginx官网找最新的源码包下载路径(截止本文时间,稳定版是 http://nginx.org/download/nginx-1.10.2.tar.gz),然后下载下来(我个人是下载到 /root 路径下):</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_55524">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain"></code><code class="bash comments">#cd</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain"></code><code class="bash comments">#pwd</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash plain">/root</code>
</div>
<div class="line number4 index3 alt1">
<code class="bash plain"></code><code class="bash comments">#wget http://nginx.org/download/nginx-1.10.2.tar.gz</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
然后解压此压缩包,并进入到文件夹 /nginx-1.10.2 去:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_365262">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain"></code><code class="bash comments">#tar -xzvf nginx-1.10.2.tar.gz</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain"></code><code class="bash comments">#cd nginx-1.10.2</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
<strong>3. 编译和安装</strong></p>
<p>
按顺序执行如下三条指令:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_588790">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash comments">#./configure --prefix=/home/ubuntu/nginx --with-pcre=/home/ubuntu/pcre-8.36 --with-zlib=/home/ubuntu/zlib-1.2.8 --with-openssl=/home/ubuntu/openssl-1.1.0c</code>
</div>
<div class="line number2 index1 alt1">
</div>
<div class="line number3 index2 alt2">
<code class="bash comments">#make</code>
</div>
<div class="line number4 index3 alt1">
</div>
<div class="line number5 index4 alt2">
<code class="bash comments">#make install</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
它们的作用分别是:生成c源码文件和makefile文件、生成二进制文件、将nginx安装到指定目录(/home/ubuntu/nginx)。</p>
<p>
注意 ./configure 指令后的参数分别指定了 nginx 的安装目录及相关依赖模块地址。</p>
<p>
自此,nginx 就安装完毕啦~</p>
<p>
<strong>三. 启动 nginx</strong></p>
<p>
执行</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_733424">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash comments">#/home/ubuntu/nginx/sbin/nginx</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
可直接启动 nginx 服务,这时候在任意地方执行:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_608767">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">wget http:</code><code class="bash plain">//127</code><code class="bash plain">.0.0.1</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
都可以下载到一份 index.html:<img style="max-width:100%!important;height:auto!important;"title="腾讯云(ubuntu)下安装 nodejs + 实现 Nginx 反向代理服务器" alt="腾讯云(ubuntu)下安装 nodejs + 实现 Nginx 反向代理服务器" src="https://zhuji.jb51.net/uploads/img/202305/4c3a519ab2eb78204d3efebcc784e409.jpg"><br>
这时候我们直接访问云主机公网 ip 地址,就能直接看到该默认页面:<img style="max-width:100%!important;height:auto!important;"title="腾讯云(ubuntu)下安装 nodejs + 实现 Nginx 反向代理服务器" alt="腾讯云(ubuntu)下安装 nodejs + 实现 Nginx 反向代理服务器" src="https://zhuji.jb51.net/uploads/img/202305/65a7803ca5cdb4769469d8cd9e3a14b9.jpg"><br><span><strong>注意!</strong></span>如果这时无法通过公网ip访问页面,请确保云主机所处的安全组是允许所有端口访问的。</p>
<p>
<br><strong>四. 执行一个node服务,并通过 nginx 配置实现反向代理</strong></p>
<p>
这里我们简单实现一个 node 页面,监听3000端口。</p>
<p>
我们在本地先写一个 index.js 文件来耍一耍:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterjs" id="highlighter_251460">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="js plain">const http = require(</code><code class="js string">'http'</code><code class="js plain">);</code>
</div>
<div class="line number2 index1 alt1">
</div>
<div class="line number3 index2 alt2">
<code class="js plain">const server = http.createserver((req, res) => {</code>
</div>
<div class="line number4 index3 alt1">
<code class="js spaces"> </code><code class="js plain">res.statuscode = 200;</code>
</div>
<div class="line number5 index4 alt2">
<code class="js plain">res.setheader(</code><code class="js string">'content-type'</code><code class="js plain">, </code><code class="js string">'text/plain'</code><code class="js plain">);</code>
</div>
<div class="line number6 index5 alt1">
<code class="js plain">res.end(</code><code class="js string">'hello world\n'</code><code class="js plain">);</code>
</div>
<div class="line number7 index6 alt2">
<code class="js plain">});</code>
</div>
<div class="line number8 index7 alt1">
</div>
<div class="line number9 index8 alt2">
<code class="js plain">server.listen(3000, () => {</code>
</div>
<div class="line number10 index9 alt1">
<code class="js spaces"> </code><code class="js plain">console.log(`node server is now running/`);</code>
</div>
<div class="line number11 index10 alt2">
<code class="js plain">});</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
执行 node index 的话,访问 http://localhost:3000/ 会有“hello world”的输出:<img style="max-width:100%!important;height:auto!important;"title="腾讯云(ubuntu)下安装 nodejs + 实现 Nginx 反向代理服务器" alt="腾讯云(ubuntu)下安装 nodejs + 实现 Nginx 反向代理服务器" src="https://zhuji.jb51.net/uploads/img/202305/4e77cdb6a25cfca22fbf80529243e142.jpg"><br>
然后咱们把这个文件放到云主机去。</p>
<p>
鉴于我已经挂到 github上,读者们可以直接通过如下指令来下载该文件:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_523082">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash comments">#git clone https://github.com/vajoy/node-test.git</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
p.s. 我个人下载到了“/root/node-project/”文件夹下,要执行node的话指令为:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_672321">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash comments">#node /root/node-project/node-test/cp1/index</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
ok,咱们接着先修改 nginx 配置。如果你忘了 nginx 的配置在哪里,可以执行这条指令来确定:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_461153">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash comments">#/home/ubuntu/nginx/sbin/nginx -t</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
本文的nginx是安装在 /home/ubuntu 下的,所以其配置文件路径是“/home/ubuntu/nginx/conf/nginx.conf”,我们这样编辑它(加上红框部分的代码):<img style="max-width:100%!important;height:auto!important;"title="腾讯云(ubuntu)下安装 nodejs + 实现 Nginx 反向代理服务器" alt="腾讯云(ubuntu)下安装 nodejs + 实现 Nginx 反向代理服务器" src="https://zhuji.jb51.net/uploads/img/202305/ebfc2e0b7d8bd41f8595222c67bae37b.jpg"><br>
这意味着当有请求路径为“/hello”时,nginx 会将请求代理到服务器的3000端口去(即node监听的端口)。</p>
<p>
五. 重启 nginx 和 node</p>
<p>
到这一步的时候别忘了两点 —— 1. 咱们修改 nginx 配置后还没重启nginx服务;2. 咱们还没有在云主机上跑node服务(上文仅仅是在本地电脑上跑了一次)。</p>
<p>
所以我们分别执行如下指令(重启nginx+跑node):</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_968348">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash comments">#/home/ubuntu/nginx/sbin/nginx -s reload</code>
</div>
<div class="line number2 index1 alt1">
</div>
<div class="line number3 index2 alt2">
<code class="bash comments">#node /root/node-project/node-test/cp1/index</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
这时候直接访问 http://公网ip/hello,就能直接看到node跑起来的页面内容了:<br><img style="max-width:100%!important;height:auto!important;"title="腾讯云(ubuntu)下安装 nodejs + 实现 Nginx 反向代理服务器" alt="腾讯云(ubuntu)下安装 nodejs + 实现 Nginx 反向代理服务器" src="https://zhuji.jb51.net/uploads/img/202305/14cd617cd786017edd406023922272e5.jpg"></p>
<p>
本文送给使用腾讯云的前端童鞋,以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。</p>
<p>
原文链接:http://www.cnblogs.com/vajoy/p/6084079.html</p>
頁:
[1]