Rumah >Operasi dan penyelenggaraan >Nginx >Bagaimana nginx+iis melaksanakan pengimbangan beban mudah

Bagaimana nginx+iis melaksanakan pengimbangan beban mudah

WBOY
WBOYke hadapan
2023-05-20 09:43:05967semak imbas

1. pemasangan nginx

nginx ialah pelayan web ringan/pelayan proksi terbalik dan pelayan proksi e-mel (imap/pop3), dan dipasang dalam bsd- Diterbitkan di bawah seumpamanya perjanjian. Ia dibangunkan oleh pengaturcara Rusia igor sysoev dan digunakan oleh Rambler (Bahasa Rusia: рамблер), sebuah laman web portal dan enjin carian Rusia yang besar. Ciri-cirinya ialah ia menduduki memori yang kurang dan mempunyai keupayaan konkurensi yang kuat Malah, keupayaan konkurensi nginx berprestasi lebih baik di kalangan pelayan web jenis yang sama. Pengguna tapak web nginx di tanah besar China termasuk: Baidu, Sina, NetEase, Tencent, dll.

Versi terkini nginx ialah 1.9.3 Yang saya muat turun ialah versi tetingkap Secara amnya, senario sebenar adalah untuk memasangnya di bawah sistem Linux, saya akan tidak memperkenalkannya di sini. Alamat muat turun rasmi:. Selepas muat turun selesai, nyahzip dan jalankan nginx.exe untuk memulakan nginx Selepas memulakan, anda akan melihat nginx dalam proses.

Bagaimana nginx+iis melaksanakan pengimbangan beban mudah

Untuk mencapai pengimbangan beban, anda perlu mengubah suai maklumat konfigurasi conf/nginx.conf Selepas mengubah suai maklumat konfigurasi, mulakan semula perkhidmatan nginx Ini boleh dicapai melalui perintah muat semula nginx -s. Di sini kami menggunakan proses batch yang disediakan oleh semut untuk beroperasi.

Bagaimana nginx+iis melaksanakan pengimbangan beban mudah

Letakkan fail nginx.bat ke dalam folder yang sama seperti nginx.exe dan jalankan terus. Semua fail yang digunakan dalam artikel ini akan disediakan pada penghujung artikel.

Bagaimana nginx+iis melaksanakan pengimbangan beban mudah

2. Pembinaan dan konfigurasi tapak

1 Bina dua tapak iis

Hanya ada satu di bawah laman web Halaman indeks ringkas yang digunakan untuk mengeluarkan maklumat pelayan semasa. Memandangkan saya tidak mempunyai dua mesin, saya menggunakan kedua-dua tapak ke mesin ini dan port terikat 8082 dan 9000 masing-masing.

 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. Ubah suai maklumat konfigurasi nginx

Ubah suai port mendengar nginx dan ubah suai nilai nod dengar di bawah pelayan http Memandangkan port 80 mesin ini telah diduduki, saya menukarnya kepada mendengar port 8083.

dengar 8083;

Tambah huluan (kluster pelayan) di bawah nod http Tetapan pelayan adalah maklumat pelayan kelompok Saya telah membina dua tapak di sini dan mengkonfigurasi dua maklumat.

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

Cari nod lokasi di bawah nod http dan ubah suainya

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;
 }

Ingat untuk memulakan semula perkhidmatan nginx selepas mengubah suai fail konfigurasi Maklumat fail konfigurasi lengkap terakhir adalah seperti berikut

3. Hasil berjalan

Lawati http://127.0.0.1:8083/index.aspx, lawatinya beberapa kali dan fokus pada bahagian yang ditandakan dengan warna merah.

Bagaimana nginx+iis melaksanakan pengimbangan beban mudah

Bagaimana nginx+iis melaksanakan pengimbangan beban mudah

Seperti yang anda lihat, permintaan kami diedarkan ke tapak 8082 dan tapak 9000, dan kali pertama ialah tapak 8082 dan kali kedua 9000. Keputusan sedemikian membuktikan bahawa persediaan pengimbangan beban kami berjaya. Cuba tutup 9000 tapak, dan kemudian muat semula halaman dan ketahui bahawa port http keluaran sentiasa 8082, yang bermaksud bahawa salah satu tapak itu tidak berfungsi Selagi masih ada tapak yang baik, tapak kami masih boleh berkhidmat.

4. Analisis Masalah

Walaupun kami telah membina tapak pengimbangan beban, masih terdapat masalah berikut.

1. Jika tapak menggunakan sesi dan permintaan diedarkan secara sama rata ke dua tapak, maka mesti ada masalah perkongsian sesi.

Gunakan pangkalan data untuk menyimpan maklumat sesi
Gunakan nginx untuk memperuntukkan permintaan daripada IP yang sama kepada pelayan tetap, ubah suai seperti berikut. ip_hash akan mengira nilai cincang yang sepadan dengan ip, dan kemudian menetapkannya kepada pelayan tetap

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

untuk membina pelayan redis, dan sesi akan dibaca daripada pelayan redis. Artikel berikut akan memperkenalkan penggunaan redis cache yang diedarkan
2. Bagaimanakah pentadbir mengemas kini fail tapak sekarang Anda boleh mengemas kini fail secara manual kepada dua pelayan, maka Manual operasi pastinya tidak dapat dilaksanakan

Kemas kini tapak berbilang pelayan boleh menggunakan program penyegerakan fail goodsync, yang akan mengesan pengubahsuaian dan penambahan fail secara automatik, dan kemudian menyegerakkan ke pelayan lain. Anda boleh menggunakan rsync di bawah Linux
3. Fungsi muat naik fail dalam tapak akan mengedarkan fail ke pelayan yang berbeza Bagaimana untuk menyelesaikan masalah perkongsian fail.

Gunakan pelayan fail untuk menyimpan semua fail pada pelayan ini dan operasi fail, membaca dan menulis semuanya ada pada pelayan ini. Terdapat juga masalah di sini, pelayan fail mempunyai had atas baca dan tulis.
4. Pelayan dengan konfigurasi beban berbeza Ada yang tinggi dan ada yang rendah Bolehkah pelayan dengan konfigurasi yang lebih tinggi mengendalikan lebih banyak permintaan

Ada beberapa algoritma untuk memuatkan pengimbangan: kaedah putaran, kaedah berselerak Kaedah lajur, kaedah sambungan paling sedikit, kaedah paling kurang hilang, kaedah tindak balas terpantas, kaedah wajaran. Kita boleh menggunakan kaedah pemberat di sini untuk mengedarkan permintaan.

 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页面的代码

  • Bagaimana nginx+iis melaksanakan pengimbangan beban mudah
  • Atas ialah kandungan terperinci Bagaimana nginx+iis melaksanakan pengimbangan beban mudah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam