【转】Nginx反向代理和负载均衡
原文鏈接:http://www.cnblogs.com/shuoer/p/7820899.html
Nginx反向代理和負(fù)載均衡
環(huán)境說明
由于我使用的是windows系統(tǒng),所以我用虛擬機(jī)虛擬出來了3臺(tái)linux系統(tǒng)
- 虛擬機(jī)一:192.168.1.20 (Nginx反向代理和負(fù)載均衡服務(wù)器,系統(tǒng)kali linux)
- 虛擬機(jī)二:192.168.1.19 (node服務(wù)器一,系統(tǒng)ubuntu 17.10)
- 虛擬機(jī)三:192.168.1.22(node服務(wù)器二,系統(tǒng)ubuntu 17.10)
環(huán)境需要的程序
- git
- Node
- Nginx
- pm2
首先環(huán)境的搭建,由于這三臺(tái)電腦都是我剛剛虛擬出來的,所以什么環(huán)境都沒有!
虛擬機(jī)一的環(huán)境搭建
由于我們的虛擬機(jī)一主要是用來做Nginx的反向代理和負(fù)載均衡的,那么我們只需要安裝Nginx就可以
$ sudo apt-get install nginx -yok我們?cè)L問下Nginx反向代理服務(wù)器是否正常啟動(dòng)
虛擬機(jī)二和虛擬機(jī)三的環(huán)境搭建
我比較喜歡使用nvm去安裝node,因?yàn)閚vm能讓我自由的去切換node的版本(兩臺(tái)node服務(wù)器環(huán)境必須一致哦!)
//安裝git工具 $ sudo apt-get install git//從github網(wǎng)站把nvm的源碼下載下來放到當(dāng)前登錄用戶的.nvm目錄下(以后方便我們找) $ git clone https://github.com/creationix/nvm.git ~/.nvm//讓nvm命令在每次打開shell窗口的時(shí)候生效 $ echo "source ~/.nvm/nvm.sh" >> ~/.bashrc //讓nvm的命令立即生效(關(guān)閉shell窗口重新打開也可以生效) $ source ~/.nvm/nvm.sh //查看nvm是否安裝成功和查看當(dāng)前的node版本信息 $ nvm ls我們安裝下node,此處直接安裝stable最新的穩(wěn)定版本
//這個(gè)時(shí)間會(huì)比較長(zhǎng),稍微有點(diǎn)耐心 $ nvm install stable安裝pm2
$ npm install pm2 -g編寫我們的項(xiàng)目代碼
初始化項(xiàng)目創(chuàng)建package.json
$ mkdir nodeapp && cd $_ $ npm init $ npm install koa --save創(chuàng)建我們的node主程序入口文件app.js(由于我們只關(guān)注與上線發(fā)布和負(fù)載均衡所以node項(xiàng)目只是一個(gè)Hello Koa)
const Koa = require('koa'); const app = new Koa(); app.use(ctx => { ctx.body = 'Hello Koa'; }); app.listen(3000);編寫pm2的配置文件pm2.json
pm2 是一個(gè)帶有負(fù)載均衡功能的Node應(yīng)用的進(jìn)程管理器.
當(dāng)你要把你的獨(dú)立代碼利用全部的服務(wù)器上的所有CPU,并保證進(jìn)程永遠(yuǎn)都活著,0秒的重載。pm2官網(wǎng)
pm2重用的命令
- pm2 start app.js : 啟動(dòng)服務(wù),入口文件是app.js。
- pm2 start app.js -i [n] --name [name] : 啟動(dòng)n個(gè)進(jìn)程,名字命名為name。
- npm stop [name or id] : 停止服務(wù)。
- npm stop all : 停止所有服務(wù)。
- npm delete [name or id] : 刪除服務(wù)。
- npm delete all : 刪除所有服務(wù)。
- npm restart [name or id] : 重啟服務(wù)。
- npm reload [name or id] : 和rastart功能相同,但是可以實(shí)現(xiàn)0s的無縫銜接;如果有nginx的使用經(jīng)驗(yàn),可以對(duì)比nginx reload指令。
- pm2 monit : 對(duì)服務(wù)進(jìn)行監(jiān)控。
- pm2 start **.json : 啟動(dòng)制定配置文件的服務(wù)
ok知道pm2怎么用了,我們采用配置文件的方式啟動(dòng),接下來編寫我們的pm2.json配置文件
{"name" : "nodeApp",//max_memory_restart: "300M",//設(shè)置node單個(gè)進(jìn)程可占用最大的內(nèi)存,如果內(nèi)存使用率超過300M,pm2自動(dòng)重啟該進(jìn)程 "script" : "app.js",//node主入口文件 "out_file" : "logs/out.log", "error_file" : "logs/error.log", "instances" : "max",//讓node程序占滿你的cpu,發(fā)揮cpu最大的功效 "exec_mode" : "cluster",//以主進(jìn)程的方式啟動(dòng) "watch":true }那pm2的配置文件和node程序?qū)懞昧宋覀冊(cè)诒镜販y(cè)試下pm2和node程序能不能正常的啟動(dòng)(有點(diǎn)小尷尬,自己本機(jī)I7的6700K的CPU居然被這個(gè)小程序給占滿了~~~)
上線部署到我們的兩臺(tái)node服務(wù)器中
其實(shí)說到上線部署呢,我們應(yīng)該有自己的git服務(wù)器,所有的代碼都應(yīng)該從git服務(wù)器上去拉取,部署呢?應(yīng)該有一個(gè)統(tǒng)一部署的方式通常使用的是jenkins,編寫好我們統(tǒng)一部署的shell腳本(在這里體現(xiàn)出來為什么所有的服務(wù)器環(huán)境必須一致了,方便管理啊),用jenkins一鍵部署,但是.....本次只是做個(gè)小實(shí)驗(yàn),沒必要這么大動(dòng)干戈,所以呢,我們還是手動(dòng)的上傳下代碼手動(dòng)起下服務(wù)吧!(下次介紹如何搭建自己的git服務(wù)器和jenkins的使用)
我們把項(xiàng)目中的node_moudles文件夾刪除然后給項(xiàng)目打個(gè)包準(zhǔn)備上傳服務(wù)器,項(xiàng)目結(jié)構(gòu)應(yīng)該是這樣的
我們使用scp命令用于將一個(gè)文件從本地上傳至服務(wù)器,或者從服務(wù)器上把一個(gè)文件下載至本地
鄭重說明:由于我本地用的windows系統(tǒng),為了演示我把項(xiàng)目文件拽進(jìn)了另一個(gè)linux虛擬機(jī)中進(jìn)行的上傳
額.....報(bào)錯(cuò)了!
額...好像ssh服務(wù)沒起來,好像也沒有安裝
//安裝ssh $ sudo apt-get install ssh -y//不管ssh啟動(dòng)沒有直接重啟ssh $ sudo service ssh restartok,好不容易上傳成功了,我們分別進(jìn)入這兩臺(tái)服務(wù)器進(jìn)行項(xiàng)目解壓和安裝依賴最后啟動(dòng)服務(wù)
為了明顯我們?cè)趦膳_(tái)服務(wù)器上分別讓頁面輸出自己的ip地址
重頭戲來了,Nginx的反向代理和負(fù)載均衡
進(jìn)入我們的虛擬機(jī)一,配置nginx.conf
溫馨提示:
- nginx的配置文件默認(rèn)在/etc/nginx/nginx.conf
- 網(wǎng)站根目錄默認(rèn)在/var/www/html
upstream模塊
負(fù)載均衡模塊用于從”upstream”指令定義的后端主機(jī)列表中選取一臺(tái)主機(jī)。nginx先使用負(fù)載均衡模塊找到一臺(tái)主機(jī),再使用upstream模塊實(shí)現(xiàn)與這臺(tái)主機(jī)的交互。
nginx 的兩種負(fù)載均衡方式
-
輪訓(xùn)加權(quán)(也可以不加權(quán),就是1:1負(fù)載)
upstream test {server 192.168.1.19:3000 weight=4;server 192.168.1.22:3000 weight=1; }
我們可以根據(jù)兩臺(tái)服務(wù)器的性能進(jìn)行分配權(quán)重,比如192.168.1.19服務(wù)器比較牛逼,另外一個(gè)比較差我們可以這么配置,按照4:1分配,比如5次訪問有4次訪問的是192.168.1.19服務(wù)器 -
ip_hash(同一ip會(huì)被分配給固定的后端服務(wù)器,解決session問題)
#”ip_hash”只能在upstream {}中使用。這條指令用于通知nginx使用ip hash負(fù)載均衡算法。 #如果沒加這條指令,nginx會(huì)使用默認(rèn)的round robin負(fù)載均衡模塊。 upstream test {ip_hash;server 192.168.1.19:3000;server 192.168.1.22:3000; }
打開nginx.conf我的可能和你們的都不一樣(我把所有的注釋都刪除了,是不是整潔了很多?)
填入如下代碼,這里我沒有采用負(fù)載均衡的任何算法
ok,將配置文件保存好之后重啟我們的nginx
$ sudo service nginx restart打開瀏覽器檢驗(yàn)下我們的成果
轉(zhuǎn)載于:https://www.cnblogs.com/xuanbiyijue/p/7856327.html
總結(jié)
以上是生活随笔為你收集整理的【转】Nginx反向代理和负载均衡的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 年少成名的我并没有放弃自己,谁敢说她\他
- 下一篇: Grafana分析Nginx日志