首頁 > 運維 > Nginx > 主體

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

WBOY
發布: 2023-05-13 23:19:04
轉載
928 人瀏覽過

一、搭建測試環境

這裡的測試環境為透過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>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>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>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>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>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>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>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>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中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!