目錄
this is server2, address 192.168.1.102:8000.
首頁 運維 Nginx Linux下nginx伺服器安裝及負載平衡怎麼配置

Linux下nginx伺服器安裝及負載平衡怎麼配置

May 13, 2023 pm 11:19 PM
linux nginx

一、搭建測試環境

這裡的測試環境為透過virtualbox 安裝的兩台lubuntu 19.04 虛擬機,linux 系統安裝方法不作贅述。

為了確保兩台 linux 虛擬機之間的相互訪問,虛擬機的網路配置除了預設的 nat 方式外,還使用了 virtualbox 軟體提供的內部網路(internal) 聯網方式。

此外,還需要將兩台虛擬機中與「內部網路」相關聯的網卡,綁定上同一網段的靜態ip 位址,則兩台主機形成區域網絡,相互之間可以直接訪問。

網路設定

開啟virtualbox 軟體,分別進入兩台虛擬機器的設定介面,為其新增連接方式為內部網路的網路連接,截圖如下(兩台虛擬機器作同樣的設定):

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]
登入後複製

由於兩台主機處於相同子網,在網關和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
登入後複製

登入進另一台虛擬機器中,執行相同的操作(注意設定檔中的 addresses 項目改為 [192.168.1.102/24] )。兩台虛擬機器的網路即配置完成。

此時有 linux 虛擬機器 server1,ip 位址為 192.168.1.101;linux 虛擬機器 server2,ip 位址為 192.168.1.102。兩台主機可相互存取。測試如下:

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
登入後複製

二、安裝nginx 伺服器

nginx 的安裝方式主要有兩種:

  • ## 預先編譯的二進位程式。這是最簡單、最快速的安裝方式,各主流作業系統都可以透過套件管理器(如 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
登入後複製

透過 

curl -i 127.0.0.1 透過 curl -i 127.0.0.1 

指令驗證web 伺服器是否可以正常存取:

$ curl -i 127.0.0.1
http/1.1 200 ok
server: nginx/1.15.9 (ubuntu)
...
登入後複製
三、負載平衡設定

負載平衡(load-balancing)即依照一定的規則將負載分攤到多個操作單元上執行,從而提高服務的可用性和回應速度。

簡單的範例圖如下:

Linux下nginx伺服器安裝及負載平衡怎麼配置

load-balancing

如某網站應用程式部署在多台主機構成的伺服器叢集上,負載平衡伺服器位於終端用戶和伺服器叢集之間,負責接收終端用戶的存取流量,並根據一定的規則將使用者存取分發給後端的伺服器主機,從而提高在高並發狀態下的回應速度。

負載平衡伺服器

nginx 可以透過 upstream 選項來設定負載平衡。這裡使用虛擬機器 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;
  }
}
登入後複製

基於測試的目的,目前只有兩台虛擬機。 server1(192.168.1.101)已經當作負載平衡伺服器,所以使用 server2(192.168.1.102)作為應用伺服器。

這裡借助 nginx 的虛擬主機功能,分別將 192.168.1.102 和 192.168.1.102:8000 「模擬」為兩台不同的應用伺服器。

應用程式伺服器

修改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 文件,作為default 網站的index 頁面,內容如下:

<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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Linux體系結構:揭示5個基本組件 Linux體系結構:揭示5個基本組件 Apr 20, 2025 am 12:04 AM

Linux系統的五個基本組件是:1.內核,2.系統庫,3.系統實用程序,4.圖形用戶界面,5.應用程序。內核管理硬件資源,系統庫提供預編譯函數,系統實用程序用於系統管理,GUI提供可視化交互,應用程序利用這些組件實現功能。

git怎麼查看倉庫地址 git怎麼查看倉庫地址 Apr 17, 2025 pm 01:54 PM

要查看 Git 倉庫地址,請執行以下步驟:1. 打開命令行並導航到倉庫目錄;2. 運行 "git remote -v" 命令;3. 查看輸出中的倉庫名稱及其相應的地址。

notepad怎麼運行java代碼 notepad怎麼運行java代碼 Apr 16, 2025 pm 07:39 PM

雖然 Notepad 無法直接運行 Java 代碼,但可以通過借助其他工具實現:使用命令行編譯器 (javac) 編譯代碼,生成字節碼文件 (filename.class)。使用 Java 解釋器 (java) 解釋字節碼,執行代碼並輸出結果。

Linux的主要目的是什麼? Linux的主要目的是什麼? Apr 16, 2025 am 12:19 AM

Linux的主要用途包括:1.服務器操作系統,2.嵌入式系統,3.桌面操作系統,4.開發和測試環境。 Linux在這些領域表現出色,提供了穩定性、安全性和高效的開發工具。

sublime寫好代碼後如何運行 sublime寫好代碼後如何運行 Apr 16, 2025 am 08:51 AM

在 Sublime 中運行代碼的方法有六種:通過熱鍵、菜單、構建系統、命令行、設置默認構建系統和自定義構建命令,並可通過右鍵單擊項目/文件運行單個文件/項目,構建系統可用性取決於 Sublime Text 的安裝情況。

laravel安裝代碼 laravel安裝代碼 Apr 18, 2025 pm 12:30 PM

要安裝 Laravel,需依序進行以下步驟:安裝 Composer(適用於 macOS/Linux 和 Windows)安裝 Laravel 安裝器創建新項目啟動服務訪問應用程序(網址:http://127.0.0.1:8000)設置數據庫連接(如果需要)

git軟件安裝 git軟件安裝 Apr 17, 2025 am 11:57 AM

安裝 Git 軟件包括以下步驟:下載安裝包運行安裝包驗證安裝配置 Git安裝 Git Bash(僅限 Windows)

如何設置重要的 Git 配置全局屬性 如何設置重要的 Git 配置全局屬性 Apr 17, 2025 pm 12:21 PM

自定義開發環境的方法有很多種,但全局 Git 配置文件是最有可能用於自定義設置(例如用戶名、電子郵件、首選文本編輯器和遠程分支)的一種。以下是您需要了解的有關全局 Git 配置文件的關鍵事項。

See all articles