溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

nginx+iis如何實現(xiàn)簡單的負載均衡

發(fā)布時間:2022-04-29 16:24:17 來源:億速云 閱讀:359 作者:iii 欄目:大數(shù)據(jù)

這篇“nginx+iis如何實現(xiàn)簡單的負載均衡”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“nginx+iis如何實現(xiàn)簡單的負載均衡”文章吧。

一、nginx安裝

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

  最新版本的nginx版本為1.9.3,我這下載的是window版本的,一般實際場景都是安裝在linux系統(tǒng)下的,由于linux系統(tǒng)目前正在摸索中這里就不介紹。官方下載地址:。下載完成之后解壓運行nginx.exe就啟動了nginx了,啟動后會在進程里面看到nginx。

nginx+iis如何實現(xiàn)簡單的負載均衡

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

nginx+iis如何實現(xiàn)簡單的負載均衡

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

 nginx+iis如何實現(xiàn)簡單的負載均衡

二、站點搭建及配置

1.搭建兩個iis站點

 站點下只有一個簡單的index頁面,用來輸出當前服務(wù)器信息。由于我沒有兩臺機器,所以將兩個站點都部署到本機了,分別綁定了8082和9000兩個端口。

 protected void page_load(object sender, eventargs e)
 {
  label0.text = "請求開始時間:"+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訪問端口:" + request.servervariables["server_port"];//http訪問端口"
  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 = "虛擬目錄的絕對路徑:" + request.servervariables["appl_rhysical_path"];//虛擬目錄的絕對路徑 
  label9.text = "執(zhí)行文件的絕對路徑:" + request.servervariables["path_translated"];//執(zhí)行文件的絕對路徑 
  label10.text = "虛擬目錄session總數(shù):" + session.contents.count.tostring();//虛擬目錄session總數(shù) 
  label11.text = "虛擬目錄application總數(shù):" + application.contents.count.tostring();//虛擬目錄application總數(shù) 
  label12.text = "域名主機:" + request.servervariables["http_host"];//域名主機 
  label13.text = "服務(wù)器區(qū)域語言:" + request.servervariables["http_accept_language"];//服務(wù)器區(qū)域語言 
  label14.text = "用戶信息:" + request.servervariables["http_user_agent"];
  label14.text = "cpu個數(shù):" + environment.getenvironmentvariable("number_of_processors");//cpu個數(shù) 
  label15.text = "cpu類型:" + environment.getenvironmentvariable("processor_identifier");//cpu類型 
  label16.text = "請求來源地址:" + request.headers["x-real-ip"];
 }

2.修改nginx配置信息

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

   listen       8083;

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

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

 在http節(jié)點下找到location節(jié)點修改

location / {
  root html;
  index index.aspx index.html index.htm; #修改主頁為index.aspx
 #其中jq_one 對應(yīng)著upstream設(shè)置的集群名稱
 proxy_pass  http://jq_one; 
 #設(shè)置主機頭和客戶端真實地址,以便服務(wù)器獲取客戶端真實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.運行結(jié)果

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

nginx+iis如何實現(xiàn)簡單的負載均衡

nginx+iis如何實現(xiàn)簡單的負載均衡

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

四、問題分析

  雖然我們搭建好了負載均衡站點,但是還存在以下問題。

  1.如果站點使用了session,請求平均分配到兩個站點,那么必然存在session共享問題,該如何解決?

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

  upstream jq_one{
   server 127.0.0.1:8082 ;
    server 127.0.0.1:9000 ;
   ip_hash;
  }

搭建一臺redis服務(wù)器,對session的讀取都從該redis服務(wù)器上讀取。后面的文章將介紹分布式緩存redis的使用
  2.管理員更新站點文件,該怎么操作,現(xiàn)在還只有兩臺服務(wù)器,可以手工將文件更新到兩臺服務(wù)器,如果是10臺呢,那么手工操作必然是不可行的

多服務(wù)器站點更新可以使用goodsync 文件同步程序,會自動檢測文件的修改新增,然后同步到其它服務(wù)器上。在linux下可以使用rsync
  3.站點中的文件上傳功能會將文件分配到不同的服務(wù)器,文件共享問題如何解決。

使用文件服務(wù)器將所有文件存儲到該服務(wù)器上,文件操作讀取寫入都在該服務(wù)器上。這里同樣會存在一個問題,文件服務(wù)器存在讀寫上限。
  4.負載的服務(wù)器配置不一樣,有的高有的低可不可以讓配置高的服務(wù)器處理請求多一些

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

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

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

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

答案是肯定的,在localtion節(jié)點設(shè)置如下請求頭信息   

 #設(shè)置主機頭和客戶端真實地址,以便服務(wù)器獲取客戶端真實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;

    代碼里面通過request.headers["x-real-ip"],就能獲取到真實ip

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

在server節(jié)點下添加新的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頁面的代碼 <li><img src="/images/1.jpg"/></li>

以上就是關(guān)于“nginx+iis如何實現(xiàn)簡單的負載均衡”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI