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