ホームページ バックエンド開発 PHPチュートリアル Nginxロードバランシング設定例

Nginxロードバランシング設定例

Jul 30, 2016 pm 01:29 PM
com nginx server

Nginx の最大のハイライトはリバース プロキシと負荷分散です。この記事では、Nginx の負荷分散の構成について詳しく説明します。
負荷分散
まず、負荷分散とは何かを簡単に理解します。文字通りに理解すると、N 台のサーバーが均等に負荷を分散し、高負荷のために特定のサーバーがダウンしたり、特定のサーバーがアイドル状態になったりすることはありません。したがって、負荷分散の前提は、複数のサーバーで実現できること、つまり 3 台以上のサーバーで十分であるということです。
テスト環境
サーバーがないため、このテストでは指定されたドメイン名を直接ホストし、VMware に 3 つの CentOS をインストールします。
テストドメイン名: a.com
サーバーIP: 192.168.5.149 (メイン)
BサーバーIP: 192.168.5.27
CサーバーIP: 192.168.5.126
導入のアイデア
サーバー A はメイン サーバーとして機能し、ドメイン名はサーバー A (192.168.5.149) に直接解決され、サーバー A はサーバー B (192.168.5.27) とサーバー C (192.168.5.126) に負荷分散されます。
写真に示すように:
Nginxロードバランシング設定例
ドメイン名解決
実際の環境ではないので、ドメイン名はテスト用のa.comになっているだけなので、a.comの解像度はhostsファイルでしか設定できません。
開く: C:WindowsSystem32driversetchosts
最後に
を追加します 192.168.5.149 a.com
保存して終了し、コマンド モードを開始して ping を実行して、設定が成功したかどうかを確認します
Nginxロードバランシング設定例
スクリーンショットから判断すると、a.com は 192.168.5.149IP に正常に解決されました
サーバーのnginx.conf設定
nginx.conf を開きます。ファイルの場所は nginx インストール ディレクトリの conf ディレクトリにあります。
次のコードを http セクションに追加します

<code>upstream a<span>.</span>com {
      server  <span>192.168</span><span>.5</span><span>.126</span>:<span>80</span>;
      server  <span>192.168</span><span>.5</span><span>.27</span>:<span>80</span>;
}

server{
    listen <span>80</span>;
    server_name a<span>.</span>com;
    location <span>/</span> {
        proxy_pass         http:<span>//a.com;</span>
        proxy_set_header   Host             <span>$host</span>;
        proxy_set_header   X<span>-Real</span><span>-IP</span><span>$remote_addr</span>;
        proxy_set_header   X<span>-Forwarded</span><span>-For</span><span>$proxy_add_x_forwarded_for</span>;
    }
}</code>
ログイン後にコピー

保存して nginx を再起動します
B.Cサーバーのnginx.conf設定
nginx.conf を開き、http セクションに次のコードを追加します

<code><span>server</span>{
    listen <span>80</span>;
    server_name a.com;
    <span>index</span><span>index</span>.html;
    root /data0/htdocs/www;
}</code>
ログイン後にコピー

保存して nginx を再起動します
テスト
a.comにアクセスする際、どのサーバーにリダイレクトされて処理されるかを区別するために、サーバーBとサーバーCの下にそれぞれ内容の異なるindex.htmlファイルを書きました。
ブラウザを開いて a.com にアクセスすると、すべてのリクエストがメイン サーバー (192.168.5.149) によってサーバー B (192.168.5.27) とサーバー C (192.168.5.126) に割り当てられ、負荷が発生していることがわかります。バランス効果。
B サーバーがページを処理します
Nginxロードバランシング設定例
C サーバーがページを処理します
Nginxロードバランシング設定例
サーバーの 1 つがダウンしたらどうなるでしょうか?
サーバーがダウンした場合、アクセスに影響はありますか?
まず例を見てみましょう。上記の例に基づいて、マシン C サーバー 192.168.5.126 がダウンしていると仮定して (ダウンタイムをシミュレートできないため、C サーバーをシャットダウンします)、再度アクセスします。
訪問結果:
Nginxロードバランシング設定例
C サーバー (192.168.5.126) がダウンしていましたが、Web サイトへのアクセスには影響がなかったことがわかりました。こうすることで、特定のマシンが負荷分散モードでダウンしているためにサイト全体がドラッグダウンすることを心配する必要がなくなります。
b.com も負荷分散を設定する必要がある場合はどうすればよいでしょうか?
a.comの設定と同じで非常に簡単です。以下の通り:
b.com のメインサーバー IP が 192.168.5.149 で、負荷が 192.168.5.150 と 192.168.5.151 マシンに分散されていると仮定します
次に、ドメイン名 b.com を 192.168.5.149IP に解決します。
メインサーバー (192.168.5.149) の nginx.conf に次のコードを追加します:

<code>upstream b<span>.</span>com {
      server  <span>192.168</span><span>.5</span><span>.150</span>:<span>80</span>;
      server  <span>192.168</span><span>.5</span><span>.151</span>:<span>80</span>;
}

server{
    listen <span>80</span>;
    server_name b<span>.</span>com;
    location <span>/</span> {
        proxy_pass         http:<span>//b.com;</span>
        proxy_set_header   Host             <span>$host</span>;
        proxy_set_header   X<span>-Real</span><span>-IP</span><span>$remote_addr</span>;
        proxy_set_header   X<span>-Forwarded</span><span>-For</span><span>$proxy_add_x_forwarded_for</span>;
    }
}</code>
ログイン後にコピー

nginx を保存して再起動します
192.168.5.150 および 192.168.5.151 マシンで nginx をセットアップし、nginx.conf を開いて最後に次のコードを追加します。

<code><span>server</span>{
    listen <span>80</span>;
    server_name b.com;
    <span>index</span><span>index</span>.html;
    root /data0/htdocs/www;
}</code>
ログイン後にコピー

保存重启nginx
完成以后步骤后即可实现b.com的负载均衡配置。
主服务器不能提供服务吗?
以上例子中,我们都是应用到了主服务器负载均衡到其它服务器上,那么主服务器本身能不能也加在服务器列表中,这样就不会白白浪费拿一台服务器纯当做转发功能,而是也参与到提供服务中来。
如以上案例三台服务器:
A服务器IP :192.168.5.149 (主)
B服务器IP :192.168.5.27
C服务器IP :192.168.5.126
我们把域名解析到A服务器,然后由A服务器转发到B服务器与C服务器,那么A服务器只做一个转发功能,现在我们让A服务器也提供站点服务。
我们先来分析一下,如果添加主服务器到upstream中,那么可能会有以下两种情况发生:
1、主服务器转发到了其它IP上,其它IP服务器正常处理;
2、主服务器转发到了自己IP上,然后又进到主服务器分配IP那里,假如一直分配到本机,则会造成一个死循环。
怎么解决这个问题呢?因为80端口已经用来监听负载均衡的处理,那么本服务器上就不能再使用80端口来处理a.com的访问请求,得用一个新的。于是我们把主服务器的nginx.conf加入以下一段代码:

<code><span>server</span>{
    listen <span>8080</span>;
    server_name a.com;
    <span>index</span><span>index</span>.html;
    root /data0/htdocs/www;
}</code>
ログイン後にコピー

重启nginx,在浏览器输入a.com:8080试试看能不能访问。结果可以正常访问
Nginxロードバランシング設定例
既然能正常访问,那么我们就可以把主服务器添加到upstream中,但是端口要改一下,如下代码:

<code>upstream a.com {
      <span>server</span><span>192.168</span><span>.5</span><span>.126</span>:<span>80</span>;
      <span>server</span><span>192.168</span><span>.5</span><span>.27</span>:<span>80</span>;
      <span>server</span><span>127.0</span><span>.0</span><span>.1</span>:<span>8080</span>;
}</code>
ログイン後にコピー

由于这里可以添加主服务器IP192.168.5.149或者127.0.0.1均可以,都表示访问自己。
重启Nginx,然后再来访问a.com看看会不会分配到主服务器上。
Nginxロードバランシング設定例
Nginxロードバランシング設定例
Nginxロードバランシング設定例
主服务器也能正常加入服务了。
最后
一、负载均衡不是nginx独有,著名鼎鼎的apache也有,但性能可能不如nginx。
二、多台服务器提供服务,但域名只解析到主服务器,而真正的服务器IP不会被ping下即可获得,增加一定安全性。
Nginxロードバランシング設定例
三、upstream里的IP不一定是内网,外网IP也可以。不过经典的案例是,局域网中某台IP暴露在外网下,域名直接解析到此IP。然后又这台主服务器转发到内网服务器IP中。
四、某台服务器宕机、不会影响网站正常运行,Nginx不会把请求转发到已宕机的IP上。

http://www.qttc.net/201208181.html

以上就介绍了Nginx负载均衡设置实例,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

nginxでクラウドサーバードメイン名を構成する方法 nginxでクラウドサーバードメイン名を構成する方法 Apr 14, 2025 pm 12:18 PM

クラウドサーバーでnginxドメイン名を構成する方法:クラウドサーバーのパブリックIPアドレスを指すレコードを作成します。 NGINX構成ファイルに仮想ホストブロックを追加し、リスニングポート、ドメイン名、およびWebサイトルートディレクトリを指定します。 nginxを再起動して変更を適用します。ドメイン名のテスト構成にアクセスします。その他のメモ:SSL証明書をインストールしてHTTPSを有効にし、ファイアウォールがポート80トラフィックを許可し、DNS解像度が有効になることを確認します。

Nginxが開始されるかどうかを確認する方法 Nginxが開始されるかどうかを確認する方法 Apr 14, 2025 pm 01:03 PM

nginxが開始されるかどうかを確認する方法:1。コマンドラインを使用します:SystemCTLステータスnginx(Linux/unix)、netstat -ano | FindStr 80(Windows); 2。ポート80が開いているかどうかを確認します。 3.システムログのnginx起動メッセージを確認します。 4. Nagios、Zabbix、Icingaなどのサードパーティツールを使用します。

Dockerでミラーを作成する方法 Dockerでミラーを作成する方法 Apr 15, 2025 am 11:27 AM

Docker画像を作成する手順:ビルド命令を含むDockerFileを書きます。 Docker Buildコマンドを使用して、ターミナルで画像を作成します。画像にタグを付け、Dockerタグコマンドを使用して名前とタグを割り当てます。

Nginxバージョンを確認する方法 Nginxバージョンを確認する方法 Apr 14, 2025 am 11:57 AM

nginxバージョンを照会できるメソッドは次のとおりです。nginx-vコマンドを使用します。 nginx.confファイルでバージョンディレクティブを表示します。 nginxエラーページを開き、ページタイトルを表示します。

nginxサーバーを開始する方法 nginxサーバーを開始する方法 Apr 14, 2025 pm 12:27 PM

NGINXサーバーを起動するには、異なるオペレーティングシステムに従って異なる手順が必要です。Linux/UNIXシステム:NGINXパッケージをインストールします(たとえば、APT-GetまたはYumを使用)。 SystemCtlを使用して、NGINXサービスを開始します(たとえば、Sudo SystemCtl Start NGinx)。 Windowsシステム:Windowsバイナリファイルをダウンロードしてインストールします。 nginx.exe実行可能ファイルを使用してnginxを開始します(たとえば、nginx.exe -c conf \ nginx.conf)。どのオペレーティングシステムを使用しても、サーバーIPにアクセスできます

Nginxが起動されているかどうかを確認する方法は? Nginxが起動されているかどうかを確認する方法は? Apr 14, 2025 pm 12:48 PM

Linuxでは、次のコマンドを使用して、nginxが起動されるかどうかを確認します。SystemCTLステータスNGINXコマンド出力に基づいて、「アクティブ:アクティブ(実行)」が表示された場合、NGINXが開始されます。 「アクティブ:非アクティブ(dead)」が表示されると、nginxが停止します。

Linuxでnginxを開始する方法 Linuxでnginxを開始する方法 Apr 14, 2025 pm 12:51 PM

Linuxでnginxを開始する手順:nginxがインストールされているかどうかを確認します。 systemctlを使用して、nginxを開始してnginxサービスを開始します。 SystemCTLを使用して、NGINXがシステムスタートアップでNGINXの自動起動を有効にすることができます。 SystemCTLステータスNGINXを使用して、スタートアップが成功していることを確認します。 Webブラウザのhttp:// localhostにアクセスして、デフォルトのウェルカムページを表示します。

nginx403を解く方法 nginx403を解く方法 Apr 14, 2025 am 10:33 AM

Nginx 403禁止エラーを修正する方法は?ファイルまたはディレクトリの許可を確認します。 2。HTACCESSファイルを確認します。 3. nginx構成ファイルを確認します。 4。nginxを再起動します。他の考えられる原因には、ファイアウォールルール、Selinux設定、またはアプリケーションの問題が含まれます。

See all articles