溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

nginx跨多個(gè)應(yīng)用程序?qū)嵗呢?fù)載均衡介紹

發(fā)布時(shí)間:2020-04-20 15:22:37 來(lái)源:億速云 閱讀:596 作者:三月 欄目:系統(tǒng)運(yùn)維

下文給大家?guī)?lái),希望能夠給大家在實(shí)際運(yùn)用中帶來(lái)一定的幫助,負(fù)載均衡涉及的東西比較多,理論也不多,網(wǎng)上有很多書籍,今天我們就用億速云在行業(yè)內(nèi)累計(jì)的經(jīng)驗(yàn)來(lái)做一個(gè)解答。 

環(huán)境介紹

配置nginx負(fù)載均衡器因會(huì)用到多臺(tái)云服務(wù)器來(lái)進(jìn)行,所以下面我會(huì)用到docker,具體docker的使用請(qǐng)移步docker實(shí)戰(zhàn)

  • 系統(tǒng)環(huán)境:

    root@ubuntu:~# lsb_release  -a          #查看系統(tǒng)版本
    No LSB modules are available.
    Distributor ID: Ubuntu
    Description:    Ubuntu 19.10
    Release:    19.10
    Codename:   eoan
    root@ubuntu:~# uname -a         #查看系統(tǒng)是多少位
    Linux ubuntu 5.3.0-18-generic #19-Ubuntu SMP Tue Oct 8 20:14:06 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
  • nginx跨多個(gè)應(yīng)用程序?qū)嵗呢?fù)載均衡介紹

  • docker版本和相關(guān)操作系統(tǒng)版本

    docker版本:
    root@ubuntu:~# docker --version         #查看docker版本
    Docker version 19.03.3, build a872fc2f86
    
    操作系統(tǒng)版本:
    [root@57b669db1de1 /]# cat /etc/redhat-release      #查看系統(tǒng)版本
    CentOS Linux release 8.0.1905 (Core) 
    [root@57b669db1de1 /]# uname -a
    Linux 57b669db1de1 5.3.0-18-generic #19-Ubuntu SMP Tue Oct 8 20:14:06 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
  • 軟件版本:

    nginx版本:
    root@ubuntu:~# nginx  -v        查看nginx版本
    nginx version: nginx/1.16.1 (Ubuntu)
    
    docker中nginx版本:
    [root@57b669db1de1 /]# nginx -v     #查看nginx版本
    nginx version: nginx/1.14.1

安裝nginx

具體nginx的安裝請(qǐng)參考nginx安裝部署

  • 安裝依賴軟件

    更新軟件包:
    root@ubuntu:~# apt-get update
    
    安裝依賴軟件:
    root@ubuntu:~# apt -y install openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev make gcc
  • 編譯安裝nginx

    下載nginx:
    root@ubuntu:~# wget http:#nginx.org/download/nginx-1.17.6.tar.gz
    
    解壓:
    root@ubuntu:/opt# tar zxf nginx-1.17.6.tar.gz 
    root@ubuntu:/opt# cd nginx-1.17.6/
    root@ubuntu:/opt/nginx-1.17.6# ls       #列出目錄
    auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src
    root@ubuntu:/opt/nginx-1.17.6# 
    
    配置:
    root@ubuntu:/opt/nginx-1.17.6# ./configure --prefix=/usr/local/nginx
    編譯以及部署:
    root@ubuntu:/opt/nginx-1.17.6# make && make install
    root@ubuntu:/opt/nginx-1.17.6# cd /usr/local/nginx/
    root@ubuntu:/usr/local/nginx# ls
    conf  html  logs  sbin
    
    啟動(dòng):
    root@ubuntu:/usr/local/nginx# ln sbin/nginx /usr/local/sbin/        #創(chuàng)建nginx軟連接,設(shè)置為命令
    root@ubuntu:/usr/local/nginx# nginx     #啟動(dòng)nginx
    root@ubuntu:/usr/local/nginx# netstat -anpl | grep nginx        #查看nginx端口是否開(kāi)啟
    root@ubuntu:/usr/local/nginx# lsof -i:80            #查看80端口是否開(kāi)啟

    docker安裝nginx

  • 創(chuàng)建容器

    下載鏡像:
    root@ubuntu:~# docker pull registry.cn-beijing.aliyuncs.com/blxt/centos
    
    創(chuàng)建容器并啟動(dòng):
    root@ubuntu:~# 
    root@ubuntu:~# docker run -itd --name nginx1 --privileged  registry.cn-beijing.aliyuncs.com/blxt/centos /sbin/init
    root@ubuntu:~# docker ps -a     #查看容器是否創(chuàng)建并啟動(dòng)
    CONTAINER ID        IMAGE                                          COMMAND             CREATED             STATUS                       PORTS               NAME
    6801d55682a3        registry.cn-beijing.aliyuncs.com/blxt/centos   "/sbin/init"        5 minutes ago       Up 5     minutes                            nginx1
    
    相同方法創(chuàng)建第二個(gè)容器:
    root@ubuntu:~# docker run -itd --name nginx2 --privileged  registry.cn-beijing.aliyuncs.com/blxt/centos /sbin/init
    root@ubuntu:~# docker ps -a 
    root@ubuntu:~# 
    root@ubuntu:~# docker ps -a
    CONTAINER ID        IMAGE                                          COMMAND             CREATED             STATUS                       PORTS               NAMES
    1d31d3fc0ec1        registry.cn-beijing.aliyuncs.com/blxt/centos   "/sbin/init"        4 minutes ago       Up 4     minutes                            nginx2
    6801d55682a3        registry.cn-beijing.aliyuncs.com/blxt/centos   "/sbin/init"        5 minutes ago       Up 5     minutes                            nginx1
    
    連接到容器:
    root@ubuntu:~# docker exec -it nginx1 /bin/bash
    root@ubuntu:~# docker exec -it nginx2 /bin/bash     
    [root@6801d55682a3 /]# hostname nginx1          #更改主機(jī)名稱
    [root@6801d55682a3 /]# bash         #使更改的名稱生效
    [root@1d31d3fc0ec1 /]# hostname nginx2
    [root@1d31d3fc0ec1 /]# bash
  • 安裝nginx

    更新軟件包:
    [root@nginx1 /]# yum clean all      #清空緩存
    [root@nginx1 /]# yum makecache      #更新軟件包
    
    安裝nginx:
    [root@nginx1 /]# yum -y install nginx
    [root@nginx1 /]# rpm -qa | grep nginx       #查看是否已經(jīng)安裝
    
    啟動(dòng)nginx:
    [root@nginx1 /]# systemctl start nginx
    [root@nginx1 /]# netstat -anpl | grep nginx     #查看nginxnn端口是否開(kāi)啟
    [root@nginx1 /]# lsof -i:80     #查看80端口是否開(kāi)啟
    安裝第二個(gè)nginx使用相同方法即可!此處省略?。。?
    
    訪問(wèn)nginx:
    [root@nginx1 /]# curl 127.0.0.1
  • 修改網(wǎng)頁(yè)內(nèi)容

    查看網(wǎng)頁(yè)存在目錄:
    [root@nginx1 nginx]# more nginx.conf        #查看配置文件
    在配置文件中找到下面root行,后面目錄即網(wǎng)頁(yè)文件存放目錄
    root         /usr/share/nginx/html;
    [root@nginx1 html]# cd /usr/share/nginx/html/
    [root@nginx1 html]# ls      #列出目錄內(nèi)容
    404.html  50x.html  index.html  nginx-logo.png  poweredby.png
    [root@nginx1 html]# echo nginx1 > index.html        #清空nginx主頁(yè)文件內(nèi)容,并重新寫入內(nèi)容為nginx1
    nginx2如同,注意不要設(shè)置一樣的主頁(yè)內(nèi)容
    
    訪問(wèn)nginx:
    [root@nginx1 html]# curl  127.0.0.1
    nginx1
    [root@nginx2 ~]# curl 127.0.0.1
    nginx2
  • 修改配置文件

    nginx1修改內(nèi)容如下:
     server {
    listen       80;
    server_name  www.nginx1.com;            //設(shè)置域名
    
    #charset koi8-r;
    
    #access_log  logs/host.access.log  main;
    
    location / {
        root   html;
        index  index.html index.htm;
        }
    }
    
    nginx2修改內(nèi)容如下:
     server {
    listen       80;
    server_name  www.nginx2.com;            //設(shè)置域名
    
    #charset koi8-r;
    
    #access_log  logs/host.access.log  main;
    
    location / {
        root   html;
        index  index.html index.htm;
        }
    }

配置http負(fù)載均衡器

要開(kāi)始使用NGINX Plus或NGINX開(kāi)源對(duì)一組服務(wù)器的HTTP流量進(jìn)行負(fù)載均衡,使用upstream指令定義該組,該指令放置在http上下文中,proxy_pass指令用來(lái)轉(zhuǎn)發(fā)請(qǐng)求到后端一般指定在loction上下文中
基本配置方法:

http {
    upstream nginx {            #test為組名
        server www.nginx1.com ;     #server用來(lái)指定后端服務(wù)器的訪問(wèn)地址,一般指定域名、ip、端口,域名和ip二選一,端口可忽略
        server www.nginx2.com weight=5;     #weight指定權(quán)重值
        server www.nginx3.com down;         #down用來(lái)停止對(duì)此服務(wù)器的轉(zhuǎn)發(fā)
        ......省略其他配置
    }
    server{
        location / {
            proxy_pass http://nginx;        #http://nginx為轉(zhuǎn)發(fā)那個(gè)組的后端服務(wù)器
            ......省略其他配置
        }
        ......省略其他配置
    }
}

nginx做負(fù)載均衡官方提供了4種方法,下面逐一介紹這四種方法:

  • Round Robin

    請(qǐng)求在服務(wù)器之間平均分配,同時(shí)考慮了服務(wù)器權(quán)重。默認(rèn)情況下使用此方法(沒(méi)有啟用它的指令)
    默認(rèn)配置就是Round Robin,配置方法:

    http {
    upstream nginx {            #test為組名
        server www.nginx1.com ;     #server用來(lái)指定后端服務(wù)器的訪問(wèn)地址
        server www.nginx2.com ;     #weight指定權(quán)重值
        ......省略其他配置
    }
    server{
        location / {
            proxy_pass http://nginx;        #http://nginx為轉(zhuǎn)發(fā)那個(gè)組的后端服務(wù)器
            ......省略其他配置
        }
        ......省略其他配置
    }
    }
  • 最少連接

    將活動(dòng)連接最少的請(qǐng)求發(fā)送到服務(wù)器,也是在考慮到服務(wù)器的權(quán)重問(wèn)題才設(shè)置的這種方法
    配置方法:

    http {
    upstream nginx {            #test為組名
           less_conn ; 
        server www.nginx1.com ;     #server用來(lái)指定后端服務(wù)器的訪問(wèn)地址
        server www.nginx2.com ;     #weight指定權(quán)重值
        ......省略其他配置
    }
    server{
        location / {
            proxy_pass http://nginx;        #http:#nginx為轉(zhuǎn)發(fā)那個(gè)組的后端服務(wù)器
            ......省略其他配置
        }
        ......省略其他配置
    }
    }
  • ip_hash

    從客戶端IP地址確定向其發(fā)送請(qǐng)求的服務(wù)器。在這種情況下,可以使用IPv4地址的前三個(gè)八位位組或整個(gè)IPv6地址來(lái)計(jì)算哈希值。該方法保證了來(lái)自同一地址的請(qǐng)求將到達(dá)同一服務(wù)器,除非它不可用。
    配置方法:

    http {
    upstream nginx {            #test為組名
           ip_hash ; 
        server www.nginx1.com ;     #server用來(lái)指定后端服務(wù)器的訪問(wèn)地址
        server www.nginx2.com ;     #weight指定權(quán)重值
        ......省略其他配置
    }
    server{
        location / {
            proxy_pass http://nginx;        #http:#nginx為轉(zhuǎn)發(fā)那個(gè)組的后端服務(wù)器
            ......省略其他配置
        }
        ......省略其他配置
    }
    }
  • hash

    向其發(fā)送請(qǐng)求的服務(wù)器是根據(jù)用戶定義的鍵確定的,該鍵可以是文本字符串,變量或組合。
    配置方法:

    http {
    upstream nginx {            #test為組名
          hash $request_uri consistent;
        server www.nginx1.com ;     #server用來(lái)指定后端服務(wù)器的訪問(wèn)地址
        server www.nginx2.com ;     #weight指定權(quán)重值
        ......省略其他配置
    }
    server{
        location / {
            proxy_pass http://nginx;        #http://nginx為轉(zhuǎn)發(fā)那個(gè)組的后端服務(wù)器
            ......省略其他配置
        }
        ......省略其他配置
    }
    }
  • 看了以上關(guān)于nginx跨多個(gè)應(yīng)用程序?qū)嵗呢?fù)載均衡介紹,如果大家還有什么地方需要了解的可以在億速云行業(yè)資訊里查找自己感興趣的或者找我們的專業(yè)技術(shù)工程師解答的,億速云技術(shù)工程師在行業(yè)內(nèi)擁有十幾年的經(jīng)驗(yàn)了。

     

     

向AI問(wèn)一下細(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