91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 服務器 > 
  • Linux系統中安裝nginx服務器及實現負載均衡配置的示例分析

Linux系統中安裝nginx服務器及實現負載均衡配置的示例分析

發布時間:2021-07-16 14:57:34 來源:億速云 閱讀:112 作者:小新 欄目:服務器

這篇文章主要介紹Linux系統中安裝nginx服務器及實現負載均衡配置的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

nginx(engine x) 是一個 高性能 的 HTTP 和 反向代理 服務器、郵件代理服務器以及通用的 TCP/UDP 代理服務器。其特點為輕量級(占用系統資源少)、穩定性好、可擴展性(模塊化結構)、并發能力強、配置簡單等。

本文主要介紹在測試環境中通過 nginx 實現基本的 負載均衡 功能。

nginx 可以提供 HTTP 服務,包括處理靜態文件,支持 SSL 和 TLS SNI、GZIP 網頁壓縮、虛擬主機、URL 重寫等功能,可以搭配 FastCGI、uwsgi 等程序處理動態請求。

此外,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 命令驗證 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>
    <h2>This is Server1, Address 192.168.1.102.</h2>
  </body>
</html>

運行 sudo systemctl restart nginx 命令重啟 nginx 服務,此時訪問http://192.168.1.102 即可獲取剛剛創建的 index.html 頁面:

$ 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>

配置“另一臺主機”上的站點,在 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>
    <h2>This is Server2, Address 192.168.1.102:8000.</h2>
  </body>
</html>

PS:為了測試目的,default 站點和 server2 站點配置在同一個主機 server2 上,且頁面稍有不同。實際環境中通常將這兩個站點配置在不同的主機上,且內容一致。

運行 sudo ln -s /etc/nginx/sites-available/server2 /etc/nginx/sites-enabled/ 命令啟用剛剛創建的 server2 站點。

重啟 nginx 服務,此時訪問 http://192.168.1.102:8000 即可獲取剛剛創建的 index2.html 頁面:

$ 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>

負載均衡測試

回到負載均衡服務器即虛擬機 server1 上,其配置文件中設置的 反向代理 URL 為 http://backend 。

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

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

127.0.0.1 backend

即可將該域名解析到本地 IP ,完成對負載均衡服務器的訪問。

重啟 nginx 服務,在 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 對負載均衡服務器http://backend 的訪問,完成了對應用服務器 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服務器及實現負載均衡配置的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

洛浦县| 涡阳县| 石泉县| 大姚县| 手机| 长宁县| 阳春市| 乐安县| 绥化市| 屏东县| 呈贡县| 桦甸市| 徐水县| 那曲县| 淮北市| 正安县| 牡丹江市| 德格县| 平罗县| 巴彦淖尔市| 遂平县| 时尚| 奉贤区| 永城市| 平武县| 玛沁县| 丰宁| 曲麻莱县| 龙井市| 汝阳县| 樟树市| 北票市| 徐水县| 鲁甸县| 永顺县| 晋江市| 宜兰县| 岑巩县| 怀宁县| 黄平县| 长汀县|