日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Nginx >内容正文

Nginx

【转】Nginx反向代理和负载均衡

發布時間:2024/4/17 Nginx 72 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】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 -y

ok我們訪問下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虛擬機中進行的上傳

//scp 本地文件 遠程服務器用戶名@遠程服務器地址:/home/shuoer//把項目文件上傳至虛擬機一 scp nodeapp.zip shuoer@192.168.1.19/home/shuoer //把項目文件上傳至虛擬機二 scp nodeapp.zip shuoer@192.168.1.22/home/shuoer

額.....報錯了!

額...好像ssh服務沒起來,好像也沒有安裝

//安裝ssh $ sudo apt-get install ssh -y//不管ssh啟動沒有直接重啟ssh $ sudo service ssh restart

ok,好不容易上傳成功了,我們分別進入這兩臺服務器進行項目解壓和安裝依賴最后啟動服務

為了明顯我們在兩臺服務器上分別讓頁面輸出自己的ip地址

重頭戲來了,Nginx的反向代理和負載均衡

進入我們的虛擬機一,配置nginx.conf
溫馨提示:

  • nginx的配置文件默認在/etc/nginx/nginx.conf
  • 網站根目錄默認在/var/www/html

upstream模塊

負載均衡模塊用于從”upstream”指令定義的后端主機列表中選取一臺主機。nginx先使用負載均衡模塊找到一臺主機,再使用upstream模塊實現與這臺主機的交互。

nginx 的兩種負載均衡方式

  • 輪訓加權(也可以不加權,就是1:1負載)
    我們可以根據兩臺服務器的性能進行分配權重,比如192.168.1.19服務器比較牛逼,另外一個比較差我們可以這么配置,按照4:1分配,比如5次訪問有4次訪問的是192.168.1.19服務器

    upstream test {server 192.168.1.19:3000 weight=4;server 192.168.1.22:3000 weight=1; }
  • 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我的可能和你們的都不一樣(我把所有的注釋都刪除了,是不是整潔了很多?)
填入如下代碼,這里我沒有采用負載均衡的任何算法

user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; events { worker_connections 768; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE ssl_prefer_server_ciphers on; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; gzip on; #include /etc/nginx/conf.d/*.conf; #include /etc/nginx/sites-enabled/*; #用于設置負載的服務器列表 upstream test { #虛擬機二 server 192.168.1.19:3000; #虛擬機三 server 192.168.1.22:3000; } server { #監聽80端口 listen 80; location / { #轉發的地址,此處為upstream模塊 proxy_pass http://test; } } }

ok,將配置文件保存好之后重啟我們的nginx

$ sudo service nginx restart

打開瀏覽器檢驗下我們的成果

轉載于:https://www.cnblogs.com/xuanbiyijue/p/7856327.html

總結

以上是生活随笔為你收集整理的【转】Nginx反向代理和负载均衡的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。