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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

nginx+iis实现负载均衡

發(fā)布時(shí)間:2023/11/27 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nginx+iis实现负载均衡 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

nginx安裝

??? Nginx是一款輕量級(jí)的Web 服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,并在一個(gè)BSD-like 協(xié)議下發(fā)行。由俄羅斯的程序設(shè)計(jì)師Igor Sysoev所開發(fā),供俄國(guó)大型的入口網(wǎng)站及搜索引擎Rambler(俄文:Рамблер)使用。其特點(diǎn)是占有內(nèi)存少,并發(fā)能力強(qiáng),事實(shí)上nginx的并發(fā)能力確實(shí)在同類型的網(wǎng)頁(yè)服務(wù)器中表現(xiàn)較好,中國(guó)大陸使用nginx網(wǎng)站用戶有:百度、新浪、網(wǎng)易、騰訊等。

  最新版本的nginx版本為1.9.3,我這下載的是window版本的,一般實(shí)際場(chǎng)景都是安裝在linux系統(tǒng)下的,由于linux系統(tǒng)目前正在摸索中這里就不介紹。官方下載地址:nginx-1.9.3.zip?博客園下載地址:nginx-1.9.3.zip?。下載完成之后解壓運(yùn)行nginx.exe就啟動(dòng)了nginx了,啟動(dòng)后會(huì)在進(jìn)程里面看到nginx。

?? 要實(shí)現(xiàn)負(fù)載均衡需要修改conf/nginx.conf的配置信息,修改配置信息之后重新啟動(dòng)nginx服務(wù),可以通過(guò)nginx -s reload指令實(shí)現(xiàn)。這里我們使用?Ants?提供的一個(gè)批處理來(lái)操作。

將nginx.bat文件放到nginx.exe相同文件夾下,直接運(yùn)行就行了。文章結(jié)尾會(huì)提供本文用到的所有文件。

?

回到頂部

站點(diǎn)搭建及配置

1.搭建兩個(gè)iis站點(diǎn)

?站點(diǎn)下只有一個(gè)簡(jiǎn)單的index頁(yè)面,用來(lái)輸出當(dāng)前服務(wù)器信息。由于我沒有兩臺(tái)機(jī)器,所以將兩個(gè)站點(diǎn)都部署到本機(jī)了,分別綁定了8082和9000兩個(gè)端口。

 protected void Page_Load(object sender, EventArgs e){Label0.Text = "請(qǐng)求開始時(shí)間:"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");Label1.Text = "服務(wù)器名稱:" + Server.MachineName;//服務(wù)器名稱  Label2.Text = "服務(wù)器IP地址:" + Request.ServerVariables["LOCAL_ADDR"];//服務(wù)器IP地址  Label3.Text = "HTTP訪問(wèn)端口:" + Request.ServerVariables["SERVER_PORT"];//HTTP訪問(wèn)端口"Label4.Text = ".NET解釋引擎版本:" + ".NET CLR" + Environment.Version.Major + "." + Environment.Version.Minor + "." + Environment.Version.Build + "." + Environment.Version.Revision;//.NET解釋引擎版本  Label5.Text = "服務(wù)器操作系統(tǒng)版本:" + Environment.OSVersion.ToString();//服務(wù)器操作系統(tǒng)版本  Label6.Text = "服務(wù)器IIS版本:" + Request.ServerVariables["SERVER_SOFTWARE"];//服務(wù)器IIS版本  Label7.Text = "服務(wù)器域名:" + Request.ServerVariables["SERVER_NAME"];//服務(wù)器域名  Label8.Text = "虛擬目錄的絕對(duì)路徑:" + Request.ServerVariables["APPL_RHYSICAL_PATH"];//虛擬目錄的絕對(duì)路徑  Label9.Text = "執(zhí)行文件的絕對(duì)路徑:" + Request.ServerVariables["PATH_TRANSLATED"];//執(zhí)行文件的絕對(duì)路徑  Label10.Text = "虛擬目錄Session總數(shù):" + Session.Contents.Count.ToString();//虛擬目錄Session總數(shù)  Label11.Text = "虛擬目錄Application總數(shù):" + Application.Contents.Count.ToString();//虛擬目錄Application總數(shù)  Label12.Text = "域名主機(jī):" + Request.ServerVariables["HTTP_HOST"];//域名主機(jī)  Label13.Text = "服務(wù)器區(qū)域語(yǔ)言:" + Request.ServerVariables["HTTP_ACCEPT_LANGUAGE"];//服務(wù)器區(qū)域語(yǔ)言  Label14.Text = "用戶信息:" + Request.ServerVariables["HTTP_USER_AGENT"];Label14.Text = "CPU個(gè)數(shù):" + Environment.GetEnvironmentVariable("NUMBER_OF_PROCESSORS");//CPU個(gè)數(shù)  Label15.Text = "CPU類型:" + Environment.GetEnvironmentVariable("PROCESSOR_IDENTIFIER");//CPU類型  Label16.Text = "請(qǐng)求來(lái)源地址:" + Request.Headers["X-Real-IP"];}

2.修改nginx配置信息

??修改nginx監(jiān)聽端口,修改http server下的listen節(jié)點(diǎn)值,由于本機(jī)80端口已經(jīng)被占用,我改為監(jiān)聽8083端口。

?? listen?????? 8083;

? 在http節(jié)點(diǎn)下添加upstream(服務(wù)器集群),server設(shè)置的是集群服務(wù)器的信息,我這里搭建了兩個(gè)站點(diǎn),配置了兩條信息。

??? #服務(wù)器集群名稱為Jq_one
??? upstream Jq_one {
?  server? 127.0.0.1:9000;?
?  server? 127.0.0.1:8082;?
??? }

?在http節(jié)點(diǎn)下找到location節(jié)點(diǎn)修改

? location / {
??????????? root?? html;
??????????? index? index.aspx index.html index.htm; #修改主頁(yè)為index.aspx
???? #其中jq_one?對(duì)應(yīng)著upstream設(shè)置的集群名稱
???? proxy_pass???????? http://Jq_one;?
???? #設(shè)置主機(jī)頭和客戶端真實(shí)地址,以便服務(wù)器獲取客戶端真實(shí)IP
???? proxy_set_header?? Host???????????? $host;?
???? proxy_set_header?? X-Real-IP??????? $remote_addr;?
???? proxy_set_header?? X-Forwarded-For? $proxy_add_x_forwarded_for;
?}

修改完成配置文件以后記得重啟nginx服務(wù),最終完整配置文件信息如下

3.運(yùn)行結(jié)果

??訪問(wèn)http://127.0.0.1:8083/index.aspx ,多訪問(wèn)幾次,著重關(guān)注標(biāo)紅部分。

可以看到,我們的請(qǐng)求被分發(fā)到了8082站點(diǎn)和9000站點(diǎn),并且第一次是8082站點(diǎn)第二次9000。出現(xiàn)這樣的結(jié)果證明我們負(fù)載均衡搭建成功了。?嘗試關(guān)閉其中的9000站點(diǎn),然后刷新頁(yè)面發(fā)現(xiàn)輸出的http端口一直是8082,也就是說(shuō)其中一個(gè)站點(diǎn)掛了,只要還有一個(gè)站點(diǎn)是好的,我們的還是可以服務(wù)。

回到頂部

問(wèn)題分析

? 雖然我們搭建好了負(fù)載均衡站點(diǎn),但是還存在以下問(wèn)題。

? 1.如果站點(diǎn)使用了session,請(qǐng)求平均分配到兩個(gè)站點(diǎn),那么必然存在session共享問(wèn)題,該如何解決?

  • 使用數(shù)據(jù)庫(kù)保存session信息
  • 使用nginx將同一ip的請(qǐng)求分配到固定服務(wù)器,修改如下。ip_hash會(huì)計(jì)算ip對(duì)應(yīng)hash值,然后分配到固定服務(wù)器

  upstream Jq_one{
?   server 127.0.0.1:8082 ;
?   server 127.0.0.1:9000 ;
??   ip_hash;
  }

  • 搭建一臺(tái)Redis服務(wù)器,對(duì)session的讀取都從該Redis服務(wù)器上讀取。后面的文章將介紹分布式緩存Redis的使用

??2.管理員更新站點(diǎn)文件,該怎么操作,現(xiàn)在還只有兩臺(tái)服務(wù)器,可以手工將文件更新到兩臺(tái)服務(wù)器,如果是10臺(tái)呢,那么手工操作必然是不可行的

  • 多服務(wù)器站點(diǎn)更新可以使用GoodSync 文件同步程序,會(huì)自動(dòng)檢測(cè)文件的修改新增,然后同步到其它服務(wù)器上。在linux下可以使用rsync

??3.站點(diǎn)中的文件上傳功能會(huì)將文件分配到不同的服務(wù)器,文件共享問(wèn)題如何解決。

  • 使用文件服務(wù)器將所有文件存儲(chǔ)到該服務(wù)器上,文件操作讀取寫入都在該服務(wù)器上。這里同樣會(huì)存在一個(gè)問(wèn)題,文件服務(wù)器存在讀寫上限。

? 4.負(fù)載的服務(wù)器配置不一樣,有的高有的低可不可以讓配置高的服務(wù)器處理請(qǐng)求多一些

  • 這里講一下,負(fù)載均衡有好幾種算法 ?輪轉(zhuǎn)法,散列法,?最少連接法,最低缺失法,最快響應(yīng)法,加權(quán)法。我們這里可以使用加權(quán)法來(lái)分配請(qǐng)求。

???? upstream Jq_one{
?   server 127.0.0.1:8082 weight=4;
?   server 127.0.0.1:9000 weight=1;
  }

?????通過(guò)weight設(shè)置每臺(tái)服務(wù)器分配請(qǐng)求站的權(quán)重,值越高分配的越多。

?5.由于請(qǐng)求是經(jīng)過(guò)nginx轉(zhuǎn)發(fā)過(guò)來(lái)的,可以在代碼里面獲取到用戶請(qǐng)求的實(shí)際ip地址嗎?

  • 答案是肯定的,在localtion節(jié)點(diǎn)設(shè)置如下請(qǐng)求頭信息

??? #設(shè)置主機(jī)頭和客戶端真實(shí)地址,以便服務(wù)器獲取客戶端真實(shí)IP
???? proxy_set_header?? Host???????????? $host;?
???? proxy_set_header?? X-Real-IP??????? $remote_addr;?
???? proxy_set_header?? X-Forwarded-For? $proxy_add_x_forwarded_for;

??? 代碼里面通過(guò)Request.Headers["X-Real-IP"],就能獲取到真實(shí)ip

?6.nginx實(shí)現(xiàn)靜態(tài)文件(image,js,css)緩存

  • 在server節(jié)點(diǎn)下添加新的localtion
  • ?#靜態(tài)資源緩存設(shè)置
    ?location ~ \.(jpg|png|jpeg|bmp|gif|swf|css)$
    ??????? {?
    ??????????? expires 30d;
    ??????????? root /nginx-1.9.3/html;#root:? #靜態(tài)文件存在地址,這里設(shè)置在/nginx-1.9.3/html下
    ??????????? break;
    ????????}?

?? ?這是index頁(yè)面的代碼 <li><img src="/images/1.jpg"/></li>

回到頂部

總結(jié)

  通過(guò)nginx我們實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的負(fù)載均衡,實(shí)際情況比這復(fù)雜很多。比如nginx服務(wù)器掛了,那我們的站點(diǎn)就直接掛了,正確的通過(guò)keepalived組件來(lái)搭建多臺(tái)nginx服務(wù)提供服務(wù)。本篇只做為分布式系統(tǒng)的開篇,后續(xù)會(huì)陸續(xù)推出Redis緩存,數(shù)據(jù)庫(kù)實(shí)現(xiàn)分布式架構(gòu)的文章,敬請(qǐng)期待!希望能夠得到博客園分布式大牛的指導(dǎo)。

????? 本篇文章用到的資源打包下載地址:nginx_iis?

轉(zhuǎn)載于:https://www.cnblogs.com/Javi/p/6547570.html

總結(jié)

以上是生活随笔為你收集整理的nginx+iis实现负载均衡的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。