Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Wie nginx+iis einen einfachen Lastausgleich implementiert

Wie nginx+iis einen einfachen Lastausgleich implementiert

WBOY
WBOYnach vorne
2023-05-20 09:43:05940Durchsuche

1. Nginx-Installation wie eine Lizenz. Es wurde vom russischen Programmierer Igor Sysoev entwickelt und wird von Rambler (russisch: рамблер), einer großen russischen Portal-Website und Suchmaschine, verwendet. Seine Merkmale sind, dass es weniger Speicher beansprucht und über starke Parallelitätsfähigkeiten verfügt. Tatsächlich sind die Parallelitätsfähigkeiten von Nginx unter Webservern desselben Typs besser geeignet. Zu den Benutzern von Nginx-Websites auf dem chinesischen Festland gehören: Baidu, Sina, NetEase, Tencent usw.

Die neueste Version von Nginx ist 1.9.3. Im Allgemeinen besteht das eigentliche Szenario darin, es unter dem Linux-System zu installieren. Ich werde es hier nicht vorstellen. Offizielle Download-Adresse:. Nachdem der Download abgeschlossen ist, entpacken Sie nginx.exe und führen Sie es aus, um nginx zu starten. Nach dem Start wird nginx im Prozess angezeigt.

Um einen Lastausgleich zu erreichen, müssen Sie die Konfigurationsinformationen von conf/nginx.conf ändern und den Nginx-Dienst neu starten. Sie können die implementierten Anweisungen an nginx -s reload übergeben. Hier verwenden wir für den Betrieb einen von Ameisen bereitgestellten Batch-Prozess.

Wie nginx+iis einen einfachen Lastausgleich implementiert

Legen Sie die Datei nginx.bat in denselben Ordner wie nginx.exe und führen Sie sie direkt aus. Alle in diesem Artikel verwendeten Dateien werden am Ende des Artikels bereitgestellt.

Wie nginx+iis einen einfachen Lastausgleich implementiert

2. Site-Aufbau und -Konfiguration

Wie nginx+iis einen einfachen Lastausgleich implementiert

1. Erstellen Sie zwei IIS-Sites# 🎜 🎜#

Unter der Site befindet sich lediglich eine einfache Indexseite, die zur Ausgabe der aktuellen Serverinformationen dient. Da ich nicht über zwei Maschinen verfüge, habe ich beide Sites auf dieser Maschine bereitgestellt und die Ports 8082 bzw. 9000 gebunden.

 protected void page_load(object sender, eventargs e)
 {
  label0.text = "请求开始时间:"+datetime.now.tostring("yyyy-mm-dd hh:mm:ss");
  label1.text = "服务器名称:" + server.machinename;//服务器名称 
  label2.text = "服务器ip地址:" + request.servervariables["local_addr"];//服务器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 = "服务器操作系统版本:" + environment.osversion.tostring();//服务器操作系统版本 
  label6.text = "服务器iis版本:" + request.servervariables["server_software"];//服务器iis版本 
  label7.text = "服务器域名:" + request.servervariables["server_name"];//服务器域名 
  label8.text = "虚拟目录的绝对路径:" + request.servervariables["appl_rhysical_path"];//虚拟目录的绝对路径 
  label9.text = "执行文件的绝对路径:" + request.servervariables["path_translated"];//执行文件的绝对路径 
  label10.text = "虚拟目录session总数:" + session.contents.count.tostring();//虚拟目录session总数 
  label11.text = "虚拟目录application总数:" + application.contents.count.tostring();//虚拟目录application总数 
  label12.text = "域名主机:" + request.servervariables["http_host"];//域名主机 
  label13.text = "服务器区域语言:" + request.servervariables["http_accept_language"];//服务器区域语言 
  label14.text = "用户信息:" + request.servervariables["http_user_agent"];
  label14.text = "cpu个数:" + environment.getenvironmentvariable("number_of_processors");//cpu个数 
  label15.text = "cpu类型:" + environment.getenvironmentvariable("processor_identifier");//cpu类型 
  label16.text = "请求来源地址:" + request.headers["x-real-ip"];
 }
2. Ändern Sie die Nginx-Konfigurationsinformationen.

Ändern Sie den Nginx-Abhörport und den Listenknotenwert unter dem http-Server Habe es so geändert, dass Port 8083 überwacht wird.

listen 8083;

Fügen Sie den Upstream (Servercluster) unter dem http-Knoten hinzu. Ich habe hier zwei Sites erstellt und zwei Teile konfiguriert von Informationen.

 #服务器集群名称为jq_one
 upstream jq_one {
   server 127.0.0.1:9000; 
   server 127.0.0.1:8082; 
 }

Suchen Sie den Standortknoten unter dem http-Knoten und ändern Sie ihn.

location / {
  root html;
  index index.aspx index.html index.htm; #修改主页为index.aspx
 #其中jq_one 对应着upstream设置的集群名称
 proxy_pass  http://jq_one; 
 #设置主机头和客户端真实地址,以便服务器获取客户端真实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;
 }

Denken Sie daran, den Nginx-Dienst nach dem Ändern der vollständigen Konfigurationsdatei neu zu starten folgt

3. Laufergebnisse

Besuchen Sie http://127.0.0.1:8083/index.aspx, besuchen Sie es mehrmals und konzentrieren Sie sich auf die roten Teile.

Wie Sie sehen können, wurde unsere Anfrage an die 8082-Site und die 9000-Site weitergeleitet. Beim ersten Mal waren es 8082 Seiten und beim zweiten Mal waren es 9000. Ein solches Ergebnis beweist, dass unser Load-Balancing-Setup erfolgreich war. Versuchen Sie, 9000 der Sites zu schließen, aktualisieren Sie dann die Seite und stellen Sie fest, dass der Ausgabe-HTTP-Port immer 8082 ist, was bedeutet, dass eine der Sites nicht verfügbar ist. Solange es noch eine gute Site gibt, kann unsere weiterhin bedient werden. Wie nginx+iis einen einfachen Lastausgleich implementiert

4. Problemanalyse Wie nginx+iis einen einfachen Lastausgleich implementiert

Obwohl wir eine Lastausgleichsseite erstellt haben, gibt es immer noch die folgenden Probleme.

1. Wenn die Site eine Sitzung verwendet und die Anforderungen gleichmäßig auf die beiden Sites verteilt sind, muss ein Problem mit der Sitzungsfreigabe vorliegen. Wie lässt sich das Problem lösen? Datenbank zum Speichern von Sitzungsinformationen verwenden

Verwenden Sie Nginx, um Anforderungen von derselben IP einem festen Server zuzuweisen. ip_hash berechnet den der IP entsprechenden Hash-Wert und weist ihn dann einem festen Server zu.

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

Erstellen Sie einen Redis-Server und lesen Sie die Sitzung vom Redis-Server. Der folgende Artikel stellt die Verwendung von Distributed Cache Redis vor.

2. Wie aktualisiert der Administrator die Site-Dateien? Sie können die Dateien manuell auf zwei Server aktualisieren. Dann ist ein manueller Betrieb definitiv nicht möglich


Sie können das Goodsync-Dateisynchronisierungsprogramm für Multi-Server-Site-Updates verwenden, das Dateiänderungen und -ergänzungen automatisch erkennt und diese dann mit anderen Servern synchronisiert. Sie können rsync
unter Linux verwenden. 3. Die Datei-Upload-Funktion auf der Site verteilt die Dateien auf verschiedene Server.

Verwenden Sie einen Dateiserver, um alle Dateien auf diesem Server zu speichern, und Dateivorgänge sowie Lesen und Schreiben erfolgen alle auf diesem Server. Auch hier gibt es ein Problem, der Dateiserver hat eine Lese- und Schreibobergrenze.
4. Server mit unterschiedlichen Lastkonfigurationen haben unterschiedliche Konfigurationen. Kann der Server mit höherer Konfiguration mehr Anfragen verarbeiten? Mehrere Algorithmen für den Lastausgleich, Hashing-Methode, Methode der geringsten Verbindung, Methode der geringsten fehlenden Daten, Methode der schnellsten Antwort, gewichtete Methode. Wir können hier die Gewichtungsmethode verwenden, um Anfragen zu verteilen.

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

     通过weight设置每台服务器分配请求站的权重,值越高分配的越多。

 5.由于请求是经过nginx转发过来的,可以在代码里面获取到用户请求的实际ip地址吗?

答案是肯定的,在localtion节点设置如下请求头信息   

 #设置主机头和客户端真实地址,以便服务器获取客户端真实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实现静态文件(image,js,css)缓存

在server节点下添加新的localtion

 #静态资源缓存设置
 location ~ \.(jpg|png|jpeg|bmp|gif|swf|css)$
 { 
  expires 30d;
  root /nginx-1.9.3/html;#root: #静态文件存在地址,这里设置在/nginx-1.9.3/html下
  break;
 }

    这是index页面的代码

  • Wie nginx+iis einen einfachen Lastausgleich implementiert
  • Das obige ist der detaillierte Inhalt vonWie nginx+iis einen einfachen Lastausgleich implementiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen