目次
this is server2, address 192.168.1.102:8000.
ホームページ 運用・保守 Nginx Linux で nginx サーバーをインストールし、負荷分散を構成する方法

Linux で nginx サーバーをインストールし、負荷分散を構成する方法

May 13, 2023 pm 11:19 PM
linux nginx

1. テスト環境のセットアップ

ここでのテスト環境は、virtualbox を介してインストールされた 2 台の lubuntu 19.04 仮想マシンです。Linux システムのインストール方法については、詳細な説明は省略します。

2 つの Linux 仮想マシン間の相互アクセスを確保するために、デフォルトの nat 方式に加えて、仮想マシンのネットワーク構成では、virtualbox ソフトウェアが提供する内部ネットワーク (内部) ネットワーク方式も使用されます。

さらに、2 つの仮想マシンの「内部ネットワーク」に関連付けられたネットワーク カードは、同じネットワーク セグメントの静的 IP アドレスにバインドする必要があります。これにより、2 つのホストはローカル エリア ネットワークを形成し、お互いに直接通信してアクセスします。

ネットワーク構成

virtualbox ソフトウェアを開き、2 つの仮想マシンの設定インターフェイスに入り、内部ネットワーク接続方法でネットワーク接続を追加します。次のように (2 つの仮想マシン) 各仮想マシンに同じ構成を作成します):

Linux で nginx サーバーをインストールし、負荷分散を構成する方法

内部ネットワーク

仮想マシン システムにアクセスし、ip addr コマンドを使用して現在のネットワーク接続情報を表示します。

$ ip addr
...
2: enp0s3: <broadcast,multicast,up,lower_up> mtu 1500 qdisc fq_codel state up group default qlen 1000
 link/ether 08:00:27:38:65:a8 brd ff:ff:ff:ff:ff:ff
 inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic noprefixroute enp0s3
  valid_lft 86390sec preferred_lft 86390sec
 inet6 fe80::9a49:54d3:2ea6:1b50/64 scope link noprefixroute
  valid_lft forever preferred_lft forever
3: enp0s8: <broadcast,multicast,up,lower_up> mtu 1500 qdisc fq_codel state up group default qlen 1000
 link/ether 08:00:27:0d:0b:de brd ff:ff:ff:ff:ff:ff
 inet6 fe80::2329:85bd:937e:c484/64 scope link noprefixroute
  valid_lft forever preferred_lft forever
ログイン後にコピー

enp0s8 ネットワーク カードが現時点では ipv4 アドレスにバインドされていないことがわかり、手動で指定する必要があります。その静的IP。

ubuntu 17.10 バージョンから、netplan と呼ばれる新しいツールが導入され、元のネットワーク構成ファイル /etc/network/interfaces は無効になることに注意してください。

したがって、ネットワーク カードの静的 IP を設定するときは、/etc/netplan/01-network-manager-all.yaml 構成ファイルを変更する必要があります。例は次のとおりです:

network:
 version: 2
 renderer: networkmanager
  ethernets:
  enp0s8:
   dhcp4: no
   dhcp6: no
   addresses: [192.168.1.101/24]
#   gateway4: 192.168.1.101
#   nameservers:
#     addresses: [192.168.1.101, 8.8.8.8]
ログイン後にコピー

2 つのホストは同じサブネット内にあるため、ゲートウェイと DNS サーバーは構成されていない場合でも相互にアクセスできます。現時点では、対応する構成項目をコメントアウトします (後で独自の DNS サーバーを構築してみることができます)。

編集が完了したら、sudo netplan apply コマンドを実行すると、前に構成した静的 IP が有効になります。

$ ip addr
...
3: enp0s8: <broadcast,multicast,up,lower_up> mtu 1500 qdisc fq_codel state up group default qlen 1000
  link/ether 08:00:27:0d:0b:de brd ff:ff:ff:ff:ff:ff
  inet 192.168.1.101/24 brd 192.168.1.255 scope global noprefixroute enp0s8
    valid_lft forever preferred_lft forever
  inet6 fe80::a00:27ff:fe0d:bde/64 scope link
    valid_lft forever preferred_lft forever
ログイン後にコピー

別の仮想マシンにログインし、同じ操作を実行します (構成ファイルのアドレス項目が [192.168.1.102/24] に変更されることに注意してください)。 2 台の仮想マシンのネットワーク構成が完了しました。

現時点では、IP アドレス 192.168.1.101 の Linux 仮想マシン サーバー 1 と、IP アドレス 192.168.1.102 の Linux 仮想マシン サーバー 2 が存在します。 2 つのホストは相互にアクセスできます。テストは次のとおりです:

starky@server1:~$ ping 192.168.1.102 -c 2
ping 192.168.1.102 (192.168.1.102) 56(84) bytes of data.
64 bytes from 192.168.1.102: icmp_seq=1 ttl=64 time=0.951 ms
64 bytes from 192.168.1.102: icmp_seq=2 ttl=64 time=0.330 ms
--- 192.168.1.102 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 2ms
rtt min/avg/max/mdev = 0.330/0.640/0.951/0.311 ms
skitar@server2:~$ ping 192.168.1.101 -c 2
ping 192.168.1.101 (192.168.1.101) 56(84) bytes of data.
64 bytes from 192.168.1.101: icmp_seq=1 ttl=64 time=0.223 ms
64 bytes from 192.168.1.101: icmp_seq=2 ttl=64 time=0.249 ms
--- 192.168.1.101 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 29ms
rtt min/avg/max/mdev = 0.223/0.236/0.249/0.013 ms
ログイン後にコピー

2. nginx サーバーのインストール

nginx をインストールするには、主に 2 つの方法があります:

  • コンパイル前のバイナリ プログラム。これは最も簡単で最速のインストール方法であり、すべての主流オペレーティング システムはパッケージ マネージャー (ubuntu の apt-get など) を通じてインストールできます。この方法では、ほぼすべての公式モジュールまたはプラグインがインストールされます。

  • ソース コードからコンパイルしてインストールします。この方法は前者よりも柔軟で、インストールする必要があるモジュールまたはサードパーティのプラグインを選択できます。

この例には特別な要件がないため、最初のインストール方法を直接選択してください。コマンドは次のとおりです:

$ sudo apt-get update
$ sudo apt-get install nginx
ログイン後にコピー

インストールが成功したら、 systemctl status nginx コマンドを使用して nginx サービスの実行ステータスを確認します:

$ systemctl status nginx
● nginx.service - a high performance web server and a reverse proxy server
  loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: en
  active: active (running) since tue 2019-07-02 01:22:07 cst; 26s ago
   docs: man:nginx(8)
 main pid: 3748 (nginx)
  tasks: 2 (limit: 1092)
  memory: 4.9m
  cgroup: /system.slice/nginx.service
      ├─3748 nginx: master process /usr/sbin/nginx -g daemon on; master_pro
      └─3749 nginx: worker process
ログイン後にコピー

Through curl -i 127.0.0.1 Webサーバーに正常にアクセスできるか確認するコマンド:

$ curl -i 127.0.0.1
http/1.1 200 ok
server: nginx/1.15.9 (ubuntu)
...
ログイン後にコピー

3. 負荷分散設定

負荷分散(負荷分散) ) は、特定のルールに従って負荷を割り当てることを意味します。複数の操作ユニットで実行して、サービスの可用性と応答速度を向上させます。

簡単な図の例は次のとおりです。

Linux で nginx サーバーをインストールし、負荷分散を構成する方法

負荷分散

たとえば、Web サイト アプリケーションがサーバー クラスターにデプロイされているとします。負荷分散サーバーは、複数のホストで構成され、エンド ユーザーとサーバー クラスターの間に配置され、エンド ユーザーのアクセス トラフィックを受信し、一定のルールに従ってユーザー アクセスをバックエンド サーバー ホストに分散する役割を果たします。同時実行性が高い状況での応答速度が向上します。

負荷分散サーバー

nginx は、アップストリーム オプションを通じて負荷分散を構成できます。ここでは、仮想マシンserver1を負荷分散サーバーとして使用します。

serve1 上のデフォルト サイトの構成ファイル (sudo vim /etc/nginx/sites-available/default) を次の内容に変更します:

upstream backend {
  server 192.168.1.102:8000;
  server 192.168.1.102;
}
server {
  listen 80;

  location / {
    proxy_pass http://backend;
  }
}
ログイン後にコピー

テスト目的のため、現在は2 つの仮想マシン。 server1 (192.168.1.101) は負荷分散サーバーとして使用されているため、server2 (192.168.1.102) がアプリケーション サーバーとして使用されます。

ここでは、nginx の仮想ホスト機能を使用して、192.168.1.102 と 192.168.1.102:8000 を 2 つの異なるアプリケーション サーバーとして「シミュレート」します。

アプリケーション サーバー

server2 上のデフォルト サイトの構成ファイル (sudo vim /etc/nginx/sites-available/default) を次の内容に変更します。 # #

server {
    listen 80;

    root /var/www/html;

    index index.html index.htm index.nginx-debian.html;

    server_name 192.168.1.102;

    location / {
        try_files $uri $uri/ =404;
    }
}
ログイン後にコピー

/var/www/html ディレクトリにデフォルト サイトのインデックス ページとしてindex.html ファイルを作成します。内容は次のとおりです:

<html>
  <head>
    <title>index page from server1</title>
  </head>
  <body>
    <h1 id="this-nbsp-is-nbsp-server-nbsp-address-nbsp">this is server1, address 192.168.1.102.</h1>
  </body>
</html>
ログイン後にコピー

実行

sudo systemctl restart nginx nginxサービスを再起動するコマンド。この時点で、新しく作成されたindex.htmlページにアクセスできます:

$ curl 192.168.1.102
<html>
  <head>
    <title>index page from server1</title>
  </head>
  <body>
    <h1 id="this-nbsp-is-nbsp-server-nbsp-address-nbsp">this is server1, address 192.168.1.102.</h1>
  </body>
</html>
ログイン後にコピー

配置“另一台主机”上的站点,在 server2 上创建 /etc/nginx/sites-available/server2 配置文件,内容如下:

server {
    listen 8000;

    root /var/www/html;

    index index2.html index.htm index.nginx-debian.html;

    server_name 192.168.1.102;

    location / {
        try_files $uri $uri/ =404;
    }
}
ログイン後にコピー

注意监听端口和 index 页面的配置变化。在 /var/www/html 目录下创建 index2.html 文件,作为 server2 站点的 index 页面,内容如下:

<html>
  <head>
    <title>index page from server2</title>
  </head>
  <body>
    <h1 id="this-nbsp-is-nbsp-server-nbsp-address-nbsp">this is server2, address 192.168.1.102:8000.</h1>
  </body>
</html>
ログイン後にコピー

ps:为了测试目的,default 站点和 server2 站点配置在同一个主机 server2 上,且页面稍有不同。实际环境中通常将这两个站点配置在不同的主机上,且内容一致。

运行 sudo ln -s /etc/nginx/sites-available/server2 /etc/nginx/sites-enabled/ 命令启用刚刚创建的 server2 站点。

重启 nginx 服务,此时访问 即可获取刚刚创建的 index2.html 页面:

$ curl 192.168.1.102:8000
<html>
  <head>
    <title>index page from server2</title>
  </head>
  <body>
    <h1 id="this-nbsp-is-nbsp-server-nbsp-address-nbsp">this is server2, address 192.168.1.102:8000.</h1>
  </body>
</html>
ログイン後にコピー

负载均衡测试

回到负载均衡服务器即虚拟机 server1 上,其配置文件中设置的 反向代理 url 为 。

由于未曾配置域名解析服务,无法将 urlhttp://backend 定位到正确的位置。

可以修改 server1 上的 /etc/hosts 文件,添加如下一条记录:

127.0.0.1 backend

即可将该域名解析到本地 ip ,完成对负载均衡服务器的访问。

重启 nginx 服务,在 server1 上访问 ,效果如下:

$ curl http://backend
<html>
  <head>
    <title>index page from server1</title>
  </head>
  <body>
    <h1 id="this-nbsp-is-nbsp-server-nbsp-address-nbsp">this is server1, address 192.168.1.102.</h1>
  </body>
</html>
$ curl http://backend
<html>
  <head>
    <title>index page from server2</title>
  </head>
  <body>
    <h1 id="this-nbsp-is-nbsp-server-nbsp-address-nbsp">this is server2, address 192.168.1.102:8000.</h1>
  </body>
</html>
$ curl http://backend
<html>
  <head>
    <title>index page from server1</title>
  </head>
  <body>
    <h1 id="this-nbsp-is-nbsp-server-nbsp-address-nbsp">this is server1, address 192.168.1.102.</h1>
  </body>
</html>
$ curl http://backend
<html>
  <head>
    <title>index page from server2</title>
  </head>
  <body>
    <h1 id="this-nbsp-is-nbsp-server-nbsp-address-nbsp">this is server2, address 192.168.1.102:8000.</h1>
  </body>
</html>
ログイン後にコピー

从输出中可以看出,server1 对负载均衡服务器 的访问,完成了对应用服务器 server2 上两个 web 站点的 轮询 ,起到负载均衡的作用。

四、负载均衡方法

nginx 开源版本提供四种负载均衡的实现方式,简单介绍如下。

1. round robin

用户请求 均匀 地分配给后端服务器集群(可以通过 weight 选项设置轮询的 权重 ),这是 nginx 默认使用的负载均衡方式:

upstream backend {
  server backend1.example.com weight=5;
  server backend2.example.com;
}
ログイン後にコピー

2. least connections

用户请求会优先转发给集群中当前活跃连接数最少的服务器。同样支持 weight 选项。

upstream backend {
  least_conn;
  server backend1.example.com;
  server backend2.example.com;
}
ログイン後にコピー

3. ip hash

用户请求会根据 客户端 ip 地址 进行转发。即该方式意图保证某个特定的客户端最终会访问 同一个 服务器主机。

upstream backend {
  ip_hash;
  server backend1.example.com;
  server backend2.example.com;
}
ログイン後にコピー

4. generic hash

用户请求会根据一个 自定义键值 确定最终转发的目的地,该键值可以是字符串、变量或者组合(如源 ip 和端口号)。

upstream backend {
  hash $request_uri consistent;
  server backend1.example.com;
  server backend2.example.com;
}
ログイン後にコピー

权重

参考下面的示例配置:

upstream backend {
  server backend1.example.com weight=5;
  server backend2.example.com;
  server 192.0.0.1 backup;
}
ログイン後にコピー

默认权重(weight)为 1 。 backup 服务器 只有在所有其他服务器全部宕机的情况下才会接收请求。

如上面的示例,每 6 个请求会有 5 个转发给 backend1.example.com,1 个转发给 backend2.example.com。只有当 backend1 和 backend2 全部宕机时,192.0.0.1 才会接收并处理请求。

以上がLinux で nginx サーバーをインストールし、負荷分散を構成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

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

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

Dockerデスクトップの使用方法 Dockerデスクトップの使用方法 Apr 15, 2025 am 11:45 AM

Dockerデスクトップの使用方法は? Dockerデスクトップは、ローカルマシンでDockerコンテナを実行するためのツールです。使用する手順には次のものがあります。1。Dockerデスクトップをインストールします。 2。Dockerデスクトップを開始します。 3。Docker Imageを作成します(DockerFileを使用); 4. Docker画像をビルド(Docker Buildを使用); 5。Dockerコンテナを実行します(Docker Runを使用)。

Dockerコンテナの名前を確認する方法 Dockerコンテナの名前を確認する方法 Apr 15, 2025 pm 12:21 PM

すべてのコンテナ(Docker PS)をリストする手順に従って、Dockerコンテナ名を照会できます。コンテナリストをフィルタリングします(GREPコマンドを使用)。コンテナ名(「名前」列にあります)を取得します。

Dockerによってコンテナを起動する方法 Dockerによってコンテナを起動する方法 Apr 15, 2025 pm 12:27 PM

Docker Containerの起動手順:コンテナ画像を引く:「Docker Pull [Mirror Name]」を実行します。コンテナの作成:「docker create [options] [mirror name] [コマンドとパラメーター]」を使用します。コンテナを起動します:「docker start [container name or id]」を実行します。コンテナのステータスを確認してください:コンテナが「Docker PS」で実行されていることを確認します。

Docker用のコンテナを作成する方法 Docker用のコンテナを作成する方法 Apr 15, 2025 pm 12:18 PM

Dockerでコンテナを作成します。1。画像を引く:Docker Pull [ミラー名]2。コンテナを作成:Docker Run [Options] [Mirror Name] [コマンド]3。コンテナを起動:Docker Start [Container Name]

VSCODEに必要なコンピューター構成 VSCODEに必要なコンピューター構成 Apr 15, 2025 pm 09:48 PM

VSコードシステムの要件:オペレーティングシステム:オペレーティングシステム:Windows 10以降、MACOS 10.12以上、Linux Distributionプロセッサ:最小1.6 GHz、推奨2.0 GHz以上のメモリ:最小512 MB、推奨4 GB以上のストレージスペース:最低250 MB以上:その他の要件を推奨:安定ネットワーク接続、XORG/WAYLAND(Linux)

VSCODEは拡張子をインストールできません VSCODEは拡張子をインストールできません Apr 15, 2025 pm 07:18 PM

VSコード拡張機能のインストールの理由は、ネットワークの不安定性、許可不足、システム互換性の問題、VSコードバージョンが古すぎる、ウイルス対策ソフトウェアまたはファイアウォール干渉です。ネットワーク接続、許可、ログファイル、およびコードの更新、セキュリティソフトウェアの無効化、およびコードまたはコンピューターの再起動を確認することにより、問題を徐々にトラブルシューティングと解決できます。

Docker画像が失敗した場合はどうすればよいですか Docker画像が失敗した場合はどうすればよいですか Apr 15, 2025 am 11:21 AM

障害のあるDocker画像ビルドのトラブルシューティング手順:DockerFileの構文と依存関係バージョンを確認します。ビルドコンテキストに必要なソースコードと依存関係が含まれているかどうかを確認します。エラーの詳細については、ビルドログを表示します。 -targetオプションを使用して、階層フェーズを構築して障害点を識別します。 Dockerエンジンの最新バージョンを使用してください。 -t [image-name]:デバッグモードで画像を作成して、問題をデバッグします。ディスクスペースを確認し、十分であることを確認してください。 Selinuxを無効にして、ビルドプロセスへの干渉を防ぎます。コミュニティプラットフォームに助けを求め、DockerFilesを提供し、より具体的な提案のためにログの説明を作成します。

See all articles