Linux で nginx サーバーをインストールし、負荷分散を構成する方法
1. テスト環境のセットアップ
ここでのテスト環境は、virtualbox を介してインストールされた 2 台の lubuntu 19.04 仮想マシンです。Linux システムのインストール方法については、詳細な説明は省略します。
2 つの Linux 仮想マシン間の相互アクセスを確保するために、デフォルトの nat 方式に加えて、仮想マシンのネットワーク構成では、virtualbox ソフトウェアが提供する内部ネットワーク (内部) ネットワーク方式も使用されます。
さらに、2 つの仮想マシンの「内部ネットワーク」に関連付けられたネットワーク カードは、同じネットワーク セグメントの静的 IP アドレスにバインドする必要があります。これにより、2 つのホストはローカル エリア ネットワークを形成し、お互いに直接通信してアクセスします。
ネットワーク構成
virtualbox ソフトウェアを開き、2 つの仮想マシンの設定インターフェイスに入り、内部ネットワーク接続方法でネットワーク接続を追加します。次のように (2 つの仮想マシン) 各仮想マシンに同じ構成を作成します):
内部ネットワーク
仮想マシン システムにアクセスし、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. 負荷分散設定
負荷分散(負荷分散) ) は、特定のルールに従って負荷を割り当てることを意味します。複数の操作ユニットで実行して、サービスの可用性と応答速度を向上させます。
簡単な図の例は次のとおりです。
負荷分散
たとえば、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; } }
<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 サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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

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