ホームページ >運用・保守 >Nginx >nginx+iis がシンプルな負荷分散を実装する方法

nginx+iis がシンプルな負荷分散を実装する方法

WBOY
WBOY転載
2023-05-20 09:43:05963ブラウズ

1. nginx のインストール

nginx は軽量の Web サーバー/リバース プロキシ サーバーおよび電子メール (imap/pop3) プロキシ サーバーであり、bsd にインストールされます。合意。これはロシアのプログラマー igor sysoev によって開発され、ロシアの大手ポータル Web サイトおよび検索エンジンである Rambler (ロシア語: рамблер) で使用されています。その特徴は、メモリ占有量が少なく、強力な同時実行機能を備えていることです。実際、nginx の同時実行機能は、同じタイプの Web サーバー間でより優れたパフォーマンスを発揮します。中国本土の nginx Web サイトのユーザーには、Baidu、Sina、NetEase、Tencent などが含まれます。

nginx の最新バージョンは 1.9.3 です。私がダウンロードしたのは Windows バージョンです。通常、実際のシナリオでは、Linux システムにインストールします。Linux システムは現在調査中なので、インストールします。ここでは紹介しないでください。公式ダウンロードアドレス:.ダウンロードが完了したら、解凍して nginx.exe を実行して nginx を起動すると、プロセス内に nginx が表示されます。

nginx+iis がシンプルな負荷分散を実装する方法

負荷分散を実現するには、conf/nginx.conf の構成情報を変更する必要があります。構成情報を変更した後、nginx サービスを再起動します。これは、次の方法で実現できます。 nginx -s reload コマンド。ここでは、ant が提供するバッチプロセスを使用して動作します。

nginx+iis がシンプルな負荷分散を実装する方法

nginx.bat ファイルを nginx.exe と同じフォルダーに置き、直接実行します。この記事で使用されるすべてのファイルは、記事の最後に記載されています。

nginx+iis がシンプルな負荷分散を実装する方法

2. サイトの構築と構成

1. 2 つの iis サイトを構築する

以下に 1 つだけあります。サイト 現在のサーバー情報を出力するために使用される単純なインデックス ページ。マシンが 2 台ないため、両方のサイトをこのマシンに展開し、それぞれポート 8082 と 9000 にバインドしました。

 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. nginx 設定情報の変更

nginx の listen ポートを変更し、http サーバー下の listen ノードの値を変更します。このマシンのポート 80 が占有されているため、listen に変更しました。ポート8083に接続します。

listen 8083;

http ノードの下にアップストリーム (サーバー クラスター) を追加します。サーバー設定はクラスター サーバーの情報です。ここでは 2 つのサイトを構築し、2 つの情報を設定しました。

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

http ノードの下の location ノードを見つけて変更します

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

設定ファイルを変更した後は、必ず nginx サービスを再起動してください。最終的な完全な設定ファイル情報は次のとおりです

3. 実行結果

http://127.0.0.1:8083/index.aspx にアクセスして数回アクセスし、赤でマークされた部分に注目してください。

nginx+iis がシンプルな負荷分散を実装する方法

nginx+iis がシンプルな負荷分散を実装する方法

#ご覧のとおり、リクエストは 8082 サイトと 9000 サイトに分散されており、最初は 8082 サイトです。そして2回目は9000。このような結果は、負荷分散設定が成功したことを証明しています。 9000 のサイトを閉じてみて、ページを更新すると、出力 http ポートが常に 8082 であることがわかります。これは、サイトの 1 つがダウンしていることを意味します。正常なサイトがまだ存在する限り、私たちのサイトは引き続きサービスを提供できます。

4. 問題分析

負荷分散サイトを構築しましたが、まだ次のような問題があります。

1. サイトがセッションを使用しており、リクエストが 2 つのサイトに均等に分散されている場合は、セッション共有の問題が発生しているはずです。

データベースを使用してセッション情報を保存する

nginx を使用して、同じ IP へのリクエストを固定サーバーに割り当てるには、次のように変更します。 ip_hash は、IP に対応するハッシュ値を計算し、それを固定サーバーに割り当てます。

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

redis サーバーを構築し、redis サーバーからセッションを読み取ります。次の記事では、分散キャッシュ redis の使用方法を紹介します

2. 管理者はサイト ファイルをどのように更新する必要がありますか? 現在、サーバーは 2 つだけです。ファイルを 2 つのサーバーに手動で更新できます。サーバーが 10 台ある場合は、手動この操作は絶対に実行不可能です。

マルチサーバー サイトの更新の場合、goodsync ファイル同期プログラムを使用できます。このプログラムは、ファイルの変更や新規追加を自動的に検出し、他のサーバーと同期します。 Linux 3 では rsync

を使用できます。サイトのファイル アップロード機能により、ファイルが別のサーバーに割り当てられます。ファイル共有の問題を解決する方法。

ファイル サーバーを使用して、すべてのファイルをこのサーバーに保存します。ファイルの操作、読み取り、書き込みはすべてこのサーバー上で行われます。ここにも問題があり、ファイルサーバーには読み書きの上限があります。

4. 負荷構成が異なるサーバーは、構成も異なります。高いものもあれば、低いものもあります。高い構成を持つサーバーは、より多くのリクエストを処理できますか?

ここでそれについて話しましょう。負荷分散: ローテーション方式、分散方式、カラム方式、最小接続方式、最小欠落方式、最速応答方式、重み付け方式。ここで重み付け方法を使用してリクエストを分散できます。


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

  • nginx+iis がシンプルな負荷分散を実装する方法
  • 以上がnginx+iis がシンプルな負荷分散を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。