溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》
  • 首頁(yè) > 
  • 教程 > 
  • 服務(wù)器 > 
  • Linux系統(tǒng)中安裝nginx服務(wù)器及實(shí)現(xiàn)負(fù)載均衡配置的示例分析

Linux系統(tǒng)中安裝nginx服務(wù)器及實(shí)現(xiàn)負(fù)載均衡配置的示例分析

發(fā)布時(shí)間:2021-07-16 14:57:34 來(lái)源:億速云 閱讀:103 作者:小新 欄目:服務(wù)器

這篇文章主要介紹Linux系統(tǒng)中安裝nginx服務(wù)器及實(shí)現(xiàn)負(fù)載均衡配置的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

nginx(engine x) 是一個(gè) 高性能 的 HTTP 和 反向代理 服務(wù)器、郵件代理服務(wù)器以及通用的 TCP/UDP 代理服務(wù)器。其特點(diǎn)為輕量級(jí)(占用系統(tǒng)資源少)、穩(wěn)定性好、可擴(kuò)展性(模塊化結(jié)構(gòu))、并發(fā)能力強(qiáng)、配置簡(jiǎn)單等。

本文主要介紹在測(cè)試環(huán)境中通過 nginx 實(shí)現(xiàn)基本的 負(fù)載均衡 功能。

nginx 可以提供 HTTP 服務(wù),包括處理靜態(tài)文件,支持 SSL 和 TLS SNI、GZIP 網(wǎng)頁(yè)壓縮、虛擬主機(jī)、URL 重寫等功能,可以搭配 FastCGI、uwsgi 等程序處理動(dòng)態(tài)請(qǐng)求。

此外,nginx 還可以用于代理、反向代理、負(fù)載均衡、緩存等服務(wù)器功能,在集群環(huán)境中改善網(wǎng)絡(luò)負(fù)載、提高可用性。

一、搭建測(cè)試環(huán)境

這里的測(cè)試環(huán)境為通過VirtualBox 安裝的兩臺(tái)Lubuntu 19.04 虛擬機(jī),Linux 系統(tǒng)安裝方法不作贅述。

為了保證兩臺(tái) Linux 虛擬機(jī)之間的相互訪問,虛擬機(jī)的網(wǎng)絡(luò)配置除了默認(rèn)的 NAT 方式外,還使用了 VirtualBox 軟件提供的內(nèi)部網(wǎng)絡(luò)(Internal) 聯(lián)網(wǎng)方式。

此外,還需要將兩臺(tái)虛擬機(jī)中與“內(nèi)部網(wǎng)絡(luò)”相關(guān)聯(lián)的網(wǎng)卡,綁定上 同一網(wǎng)段 的靜態(tài) IP 地址,則兩臺(tái)主機(jī)形成局域網(wǎng)絡(luò),相互之間可以直接訪問。

網(wǎng)絡(luò)配置

打開 VirtualBox 軟件,分別進(jìn)入兩臺(tái)虛擬機(jī)的設(shè)置界面,為其添加 連接方式為內(nèi)部網(wǎng)絡(luò) 的網(wǎng)絡(luò)連接,截圖如下(兩臺(tái)虛擬機(jī)作同樣的配置):

Linux系統(tǒng)中安裝nginx服務(wù)器及實(shí)現(xiàn)負(fù)載均衡配置的示例分析

內(nèi)部網(wǎng)絡(luò)

登錄進(jìn)虛擬機(jī)系統(tǒng),使用 ip addr 命令查看當(dāng)前的網(wǎng)絡(luò)連接信息:

$ 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

可以看到,此時(shí)的 enp0s8 網(wǎng)卡還沒有綁定 IPv4 地址,需要為其手動(dòng)指定靜態(tài) IP。

需要 注意 的是,從 Ubuntu 17.10 版本開始,一個(gè)新的名為 netplan 的工具被引入,原來(lái)的網(wǎng)絡(luò)配置文件 /etc/network/interfaces 不再生效。

所以為網(wǎng)卡設(shè)置靜態(tài) IP 時(shí)需要修改 /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]

由于兩臺(tái)主機(jī)處于同一子網(wǎng),網(wǎng)關(guān)和 DNS 服務(wù)器未配置的情況下仍可以互相訪問。對(duì)應(yīng)的配置項(xiàng)暫時(shí)先注釋掉(后續(xù)可以嘗試自行搭建 DNS 服務(wù)器)。

編輯完成后運(yùn)行 sudo netplan apply 命令,前面配置的靜態(tài) 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

登錄進(jìn)另一臺(tái)虛擬機(jī)中,執(zhí)行同樣的操作(注意配置文件中的 addresses 項(xiàng)改為 [192.168.1.102/24] )。兩臺(tái)虛擬機(jī)的網(wǎng)絡(luò)即配置完成。

此時(shí)有 Linux 虛擬機(jī) server1,IP 地址為 192.168.1.101;Linux 虛擬機(jī) server2,IP 地址為 192.168.1.102。兩臺(tái)主機(jī)可相互訪問。測(cè)試如下:

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 服務(wù)器

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

  • 預(yù)編譯的二進(jìn)制程序。這是最簡(jiǎn)單和最快速的安裝方式,各主流操作系統(tǒng)都可以通過包管理器(如 Ubuntu 的 apt-get)安裝。此種方式會(huì)安裝幾乎所有的 官方 模塊或插件。

  • 從源代碼編譯安裝。這種方式相對(duì)于前者更加靈活,可以自行選擇需要安裝的模塊或第三方插件。

本示例并沒有特殊的需求,所以直接選擇第一種安裝方式。命令如下:

$ sudo apt-get update
$ sudo apt-get install nginx

安裝成功后,通過 systemctl status nginx 命令查看 nginx 服務(wù)的運(yùn)行狀態(tài):

$ 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 命令驗(yàn)證 Web 服務(wù)器是否可以正常訪問:

$ curl -I 127.0.0.1
HTTP/1.1 200 OK
Server: nginx/1.15.9 (Ubuntu)
...

三、負(fù)載均衡配置

負(fù)載均衡(load-balancing)即按照一定的規(guī)則將負(fù)載分?jǐn)偟蕉鄠€(gè)操作單元上執(zhí)行,從而提高服務(wù)的可用性和響應(yīng)速度。

簡(jiǎn)單的示例圖如下:

Linux系統(tǒng)中安裝nginx服務(wù)器及實(shí)現(xiàn)負(fù)載均衡配置的示例分析

load-balancing

如某網(wǎng)站應(yīng)用部署在多臺(tái)主機(jī)構(gòu)成的服務(wù)器集群上,負(fù)載均衡服務(wù)器位于終端用戶和服務(wù)器集群之間,負(fù)責(zé)接收終端用戶的訪問流量,并根據(jù)一定的規(guī)則將用戶訪問 分發(fā) 給后端的服務(wù)器主機(jī),從而提高在高并發(fā)狀態(tài)下的響應(yīng)速度。

負(fù)載均衡服務(wù)器

nginx 可以通過 upstream 選項(xiàng)配置負(fù)載均衡。這里使用虛擬機(jī) server1 作為負(fù)載均衡服務(wù)器。

修改 serve1 上默認(rèn)站點(diǎn)的配置文件( sudo vim /etc/nginx/sites-available/default ),改為如下內(nèi)容:

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

  location / {
    proxy_pass http://backend;
  }
}

基于測(cè)試的目的,當(dāng)前只有兩臺(tái)虛擬機(jī)。server1(192.168.1.101)已經(jīng)作為負(fù)載均衡服務(wù)器,所以使用 server2(192.168.1.102)作為應(yīng)用服務(wù)器。

這里借助 nginx 的虛擬主機(jī)功能,分別將 192.168.1.102 和 192.168.1.102:8000 “模擬”為兩臺(tái)不同的應(yīng)用服務(wù)器。

應(yīng)用服務(wù)器

修改 server2 上默認(rèn)站點(diǎn)的配置文件( sudo vim /etc/nginx/sites-available/default ),改為如下內(nèi)容:

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 目錄下創(chuàng)建 index.html 文件,作為 default 站點(diǎn)的 index 頁(yè)面,內(nèi)容如下:

<html>
  <head>
    <title>Index Page From Server1</title>
  </head>
  <body>
    <h2>This is Server1, Address 192.168.1.102.</h2>
  </body>
</html>

運(yùn)行 sudo systemctl restart nginx 命令重啟 nginx 服務(wù),此時(shí)訪問http://192.168.1.102 即可獲取剛剛創(chuàng)建的 index.html 頁(yè)面:

$ curl 192.168.1.102
<html>
  <head>
    <title>Index Page From Server1</title>
  </head>
  <body>
    <h2>This is Server1, Address 192.168.1.102.</h2>
  </body>
</html>

配置“另一臺(tái)主機(jī)”上的站點(diǎn),在 server2 上創(chuàng)建 /etc/nginx/sites-available/server2 配置文件,內(nèi)容如下:

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;
    }
}

注意監(jiān)聽端口和 index 頁(yè)面的配置變化。在 /var/www/html 目錄下創(chuàng)建 index2.html 文件,作為 server2 站點(diǎn)的 index 頁(yè)面,內(nèi)容如下:

<html>
  <head>
    <title>Index Page From Server2</title>
  </head>
  <body>
    <h2>This is Server2, Address 192.168.1.102:8000.</h2>
  </body>
</html>

PS:為了測(cè)試目的,default 站點(diǎn)和 server2 站點(diǎn)配置在同一個(gè)主機(jī) server2 上,且頁(yè)面稍有不同。實(shí)際環(huán)境中通常將這兩個(gè)站點(diǎn)配置在不同的主機(jī)上,且內(nèi)容一致。

運(yùn)行 sudo ln -s /etc/nginx/sites-available/server2 /etc/nginx/sites-enabled/ 命令啟用剛剛創(chuàng)建的 server2 站點(diǎn)。

重啟 nginx 服務(wù),此時(shí)訪問 http://192.168.1.102:8000 即可獲取剛剛創(chuàng)建的 index2.html 頁(yè)面:

$ curl 192.168.1.102:8000
<html>
  <head>
    <title>Index Page From Server2</title>
  </head>
  <body>
    <h2>This is Server2, Address 192.168.1.102:8000.</h2>
  </body>
</html>

負(fù)載均衡測(cè)試

回到負(fù)載均衡服務(wù)器即虛擬機(jī) server1 上,其配置文件中設(shè)置的 反向代理 URL 為 http://backend 。

由于未曾配置域名解析服務(wù),無(wú)法將 URLhttp://backend 定位到正確的位置。

可以修改 server1 上的 /etc/hosts 文件,添加如下一條記錄:

127.0.0.1 backend

即可將該域名解析到本地 IP ,完成對(duì)負(fù)載均衡服務(wù)器的訪問。

重啟 nginx 服務(wù),在 server1 上訪問http://backend ,效果如下:

$ curl http://backend
<html>
  <head>
    <title>Index Page From Server1</title>
  </head>
  <body>
    <h2>This is Server1, Address 192.168.1.102.</h2>
  </body>
</html>
$ curl http://backend
<html>
  <head>
    <title>Index Page From Server2</title>
  </head>
  <body>
    <h2>This is Server2, Address 192.168.1.102:8000.</h2>
  </body>
</html>
$ curl http://backend
<html>
  <head>
    <title>Index Page From Server1</title>
  </head>
  <body>
    <h2>This is Server1, Address 192.168.1.102.</h2>
  </body>
</html>
$ curl http://backend
<html>
  <head>
    <title>Index Page From Server2</title>
  </head>
  <body>
    <h2>This is Server2, Address 192.168.1.102:8000.</h2>
  </body>
</html>

從輸出中可以看出,server1 對(duì)負(fù)載均衡服務(wù)器http://backend 的訪問,完成了對(duì)應(yīng)用服務(wù)器 server2 上兩個(gè) Web 站點(diǎn)的 輪詢 ,起到負(fù)載均衡的作用。

四、負(fù)載均衡方法

nginx 開源版本提供四種負(fù)載均衡的實(shí)現(xiàn)方式,簡(jiǎn)單介紹如下。

1. Round Robin

用戶請(qǐng)求 均勻 地分配給后端服務(wù)器集群(可以通過 weight 選項(xiàng)設(shè)置輪詢的 權(quán)重 ),這是 nginx 默認(rèn)使用的負(fù)載均衡方式:

upstream backend {
  server backend1.example.com weight=5;
  server backend2.example.com;
}

2. Least Connections

用戶請(qǐng)求會(huì)優(yōu)先轉(zhuǎn)發(fā)給集群中當(dāng)前活躍連接數(shù)最少的服務(wù)器。同樣支持 weight 選項(xiàng)。

upstream backend {
  least_conn;
  server backend1.example.com;
  server backend2.example.com;
}

3. IP Hash

用戶請(qǐng)求會(huì)根據(jù) 客戶端 IP 地址 進(jìn)行轉(zhuǎn)發(fā)。即該方式意圖保證某個(gè)特定的客戶端最終會(huì)訪問 同一個(gè) 服務(wù)器主機(jī)。

upstream backend {
  ip_hash;
  server backend1.example.com;
  server backend2.example.com;
}

4. Generic Hash

用戶請(qǐng)求會(huì)根據(jù)一個(gè) 自定義鍵值 確定最終轉(zhuǎn)發(fā)的目的地,該鍵值可以是字符串、變量或者組合(如源 IP 和端口號(hào))。

upstream backend {
  hash $request_uri consistent;
  server backend1.example.com;
  server backend2.example.com;
}

權(quán)重

參考下面的示例配置:

upstream backend {
  server backend1.example.com weight=5;
  server backend2.example.com;
  server 192.0.0.1 backup;
}

默認(rèn)權(quán)重(weight)為 1 。 backup 服務(wù)器 只有在所有其他服務(wù)器全部宕機(jī)的情況下才會(huì)接收請(qǐng)求。

如上面的示例,每 6 個(gè)請(qǐng)求會(huì)有 5 個(gè)轉(zhuǎn)發(fā)給 backend1.example.com,1 個(gè)轉(zhuǎn)發(fā)給 backend2.example.com。只有當(dāng) backend1 和 backend2 全部宕機(jī)時(shí),192.0.0.1 才會(huì)接收并處理請(qǐng)求。

以上是“Linux系統(tǒng)中安裝nginx服務(wù)器及實(shí)現(xiàn)負(fù)載均衡配置的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI