久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    玩轉Nginx

     貪挽懶月 2022-06-20 發布于廣東

    本文內容包括:

    • nginx配置實例之反向代理;

    • nginx配置實例之動靜分離;

    • nginx配置實例之負載均衡;

    • nginx配置實例之高可用;

    • nginx原理分析



    nginx基本概念




    1、nginx是什么:
    nginx是一個高性能的服務器,占用內存少,并發能力強。

    2、反向代理:

    • 正向代理:眾所周知,我們不能直接訪問谷歌,因為有墻,要訪問我們就需要梯子,這個梯子就是正向代理。在我們瀏覽器端需要配置正向代理服務器,然后讓代理服務器幫我們去訪問谷歌,谷歌把內容返回給代理服務器,代理服務器再把內容返回到我們瀏覽器。

    • 反向代理:通常我們自己擼代碼都是發布到tomcat上,然后直接在瀏覽器訪問tomcat,這個過程是沒有代理的。反向代理就是不直接訪問tomcat,而是在瀏覽器上訪問一個代理服務器,代理服務器再決定將請求轉發給哪一個tomcat。對外而言,客戶端根本不知道自己訪問的是代理服務器。

    其實正向代理和反向代理就是代理的對象不同,正向是代理客戶端,反向是代理服務端。

    3、負載均衡:
    說負載均衡前先說說我們自己擼的代碼發布到tomcat然后通過瀏覽器訪問是怎么樣的一個過程。我們通過客戶端請求服務端,服務端跟數據庫交互,將數據返回服務端,服務端最后響應客戶端。這種方式適合系統業務復雜度較低,請求量不大的情況。如果并發請求特別多,服務器是頂不住的,就會由于服務器性能瓶頸出現問題。解決辦法就是一只湯姆貓拉不動了就多叫幾只貓。

    負載均衡示意圖

    4、動靜分離:
    靜態資源是固定的不變的,比如js、css、jpg等,動態資源就是要與數據庫交互的,比如servlet、jsp之類的。未做動靜分離的時候,不管是動態資源還是靜態資源,我們都放到同一只湯姆貓上,這樣它負擔也挺大的;做了動靜分離,就是把動態資源放到湯姆貓上,靜態資源放到另外一臺服務器上,然后客戶端請求通過nginx,由nginx來決定是訪問動態服務器還是靜態服務器,這樣就降低了單臺服務器的壓力。



    Nginx的安裝、常用命令和配置文件




    1、安裝nginx:

    • 首先進入官網下載nginx。https:///

    • 安裝需要的編譯工具,包括pcre-devel、openssl-devel、gcczlib-devel。用 yum install make安裝即可。

    • 將nginx上傳到Linux中,解壓,然后進入到解壓縮目錄,執行./configure,出現下圖才表示configure成功了。

      configure成功
    • 完事兒后再執行 make&&make install,如下圖所示則安裝成功了。安裝完后在/usr/local目錄中,會有一個nginx目錄,啟動腳本在nginx/sbin中。

      安裝成功
    • 進入到/usr/local/nginx/sbin目錄中,執行./nginx,就啟動了nginx,瀏覽器訪問你Linux機器的ip,出現下圖就表示啟動成功。如果訪問不了,注意防火墻是否開放了80端口。

      nginx啟動成功

    2、nginx常用命令:
    以下列舉的命令都是在/usr/local/nginx/sbin下執行的。

    • ./nginx:啟動nginx

    • ./nginx -s stop:快速關閉nginx,可能不保存相關信息

    • ./nginx -s quit:平穩關閉nginx,保存相關信息

    • ./nginx -s reload:重新加載配置文件

    • ./nginx -s reopen:重新打開日志文件

    • ./nginx -c filename:為nginx指定一個配置文件

    • ./nginx -t:檢查配置文件的配置是否有語法錯誤

    • ./nginx -v:查看nginx的版本

    • ./nginx -V:查看版本以及配置參數等

    3、nginx的配置文件:
    配置文件的位置:/usr/local/nginx/conf下的nginx.conf。配置文件分為三部分,全局塊、events塊和http塊。

    配置文件
    • 從配置文件開始到events之間的叫全局塊,配置全局的一些指令。worker_processes 1表示nginx處理的并發數量,值越大,能處理的并發量就越多。

    • events塊主要是影響nginx服務器與用戶的網絡連接。worker_connections 1024表示支持的最大連接數。

    • http塊是配置最頻繁的部分,又包括http全局塊和server塊。http全局塊可配置的指令包括文件引入、mime-type定義、日志自定義、連接超時時間和單鏈接請求數上限等;server塊是最主要的配置部分,配置一些和主機相關的東西。



    Nginx實現反向代理




    1、最終效果:
    在瀏覽器上輸入www.xixihaha.com,跳轉到tomcat的主頁面(所以要先安裝一個tomcat并啟動;或者也可以搞個springboot項目丟上去啟動)。因為用到了域名,所以要在windows的host文件中配置域名與虛擬機ip的映射(域名的工作原理就是先看host文件中有沒有映射,沒有就通過DNS服務器去解析域名)。

    2、進行配置:
    首先將server_name改成虛擬機的IP,然后在location那里設置代理的域名和端口,這樣就搞定了。

    配置反向代理

    3、代理多個端口:
    上面是將www.xixihaha.com的請求轉發到8080端口了,現在像將www.xixihaha.com/xi的請求轉發到8081端口,www.xixihaha.com/ha的請求轉發到8082端口。

    • 首先在8081端口tomcat的webapp目錄下新建一閣文件夾名字為"xi",文件夾里面放一個xi.html;然后在8082端口omcat的webapp目錄下新建一個ha文件夾,在文件夾里面放一個ha.html。分別啟動這兩個tomcat。

    • 然后在server塊里面進行如下的配置:

    server {
            listen       80;
            server_name  www.xixihaha.com;
            location ~ /xi/ {
                proxy_pass http://127.0.0.1:8081;
            }
            location ~ /ha/ {
                proxy_pass http://127.0.0.1:8082;
            }
        }

    注意一個配置文件里可以寫多個server,這個server和剛才配置的轉發到tomcat歡迎頁的可以同時存在。這個server配置location的時候用的類似于正則表達式,~ /xi/就表示路徑中有xi的就轉發到8081端口。

    ~   包含該字符串就匹配,區分大小寫
    ~*  包含該字符串就匹配,不區分大小寫
    =   完全相同才匹配
    ^~  匹配不包含正則的且匹配度最高的location
    • 最終效果圖:

      反向代理


    Nginx實現負載均衡




    1、準備工作:
    上面說了負載均衡就是將多個請求分配給不同的服務器,減輕單一服務器的壓力?,F在我們先在8081和8082的tomcat的webapp目錄下新建一個文件夾test,里面都放一個index.html(實際上這兩個index.html是完全一樣的,就是代表我們需要做負載均衡的項目,這里為了等下可以更好的看到效果,這兩個html可以做一些標記,比如8081的就標記一下8081)。

    2、在nginx.conf中配置:

    • 在http塊中添加如下配置:

    upstream myserver {
        server  192.168.0.103:8081;
        server  192.168.0.103:8082;
    }
    • 然后將server塊中的server_name改成虛擬機的IP或者host中配置的域名(做反向代理的時候已經改了)。

    • 在server塊的location中添加如下配置:

    proxy_pass  http://myserver;

    總體配置如下圖:

    負載均衡配置

    配置好以后,在瀏覽器訪問就會發現,第一次訪問的是8081,第二次訪問的是8082,以此輪詢。如果你用谷歌瀏覽器訪問,發現并沒有輪詢,那是因為谷歌瀏覽器把index.html緩存下來了。f12之后再f1,然后將下圖中的勾上,然后開著調試窗口去訪問,就可以看到輪詢的效果了。

    調試時不緩存

    3、nginx負載均衡的算法:

    • 輪詢:nginx默認就是輪詢算法,就是不爭不搶,一人一次。上面演示的就是輪詢。

    • 權重:每臺服務器設置權重,權重越高的就會接收到越多的請求。配置如下:

    upstream myserver {
        server  192.168.0.103:8081 weight=2;
        server  192.168.0.103:8082 down;
        server  192.168.0.103:8083 backup;
        server  192.168.0.103:8084 max_fails=3 fail_timeout=20s fail_time=10s;
    }
    # weight表示權重,默認是1,值越大,負責處理的請求就越多;
    # down表示該臺服務器宕機了,不參與輪詢;
    # backup表示該臺服務器是替補,當其他所有的都down或者忙的時候,它才會上場;
    # max_fails=3 fail_timeout=20s fail_time=10s表示20秒內有超過3個請求失敗了,就將該臺服務器停機10秒。
    • ip_hash算法:對用戶的ip進行hash取值,然后分配到固定的一臺服務器上(一樣可以加權)。這樣每個ip都會固定一臺服務器。配置方法如下:

    upstream myserver {
        ip_hash;
        server  192.168.0.103:8081;
        server  192.168.0.103:8082;
    }
    • least_conn:將請求轉發給連接數最少的服務器(一樣可以加權)。配置方法如下:

    upstream myserver {
        least_conn;
        server  192.168.0.103:8081;
        server  192.168.0.103:8082;
    }
    • url_hash:這是第三方策略,對url進行hash取值,每個url確定一臺服務器。配置方法:

    upstream myserver {
        hash $request_uri
        server  192.168.0.103:8081;
        server  192.168.0.103:8082;
    }
    • fair:這是第三方策略,服務器響應時間最短的優先分配。配置方法:

    upstream myserver {
        server  192.168.0.103:8081;
        server  192.168.0.103:8082;
        fair;
    }


    Nginx實現動靜分離




    上面說了動靜分離就是將動態和靜態請求分離開來,靜態請求就請求靜態服務器,動態請求就去請求tomcat。

    1、實現方式:

    • 將靜態資源放到靜態服務器單獨部署,動態資源放到動態服務器單獨部署(常用方式)。通過location指定不同后綴名實現不同的轉發。通過expires參數可以設置瀏覽器緩存過期時間。比如設置的值是3d,那么3天內的請求,會比對請求的文件有沒有更新,如果沒有,那就直接從瀏覽器緩存返回,狀態碼為304;如果有變化再從服務器重新下載,狀態碼為200。

    • 將動靜態文件一起混合發布,再通過nginx來分開。

    2、準備工作:
    在linux上準備一些靜態資源,比如在/opt下新建一個目錄叫static,然后在static里面建兩個目錄,一個html,一個image,分別放入html文件(index.html)和image(timg.jpg)文件。

    3、配置:
    在server塊中進行如下配置:

    listen       80;
    server_name  www.xixihaha.com;    
    location /html/ {
        root  /opt/static/;
        index index.html index.htm;
    }
     location /image/ {
        root /opt/static/;
        # 自動列出目錄下的文件
        autoindex  on;
    }

    配置文件截圖如下:

    動靜分離配置

    要注意把location /html/location /image/放到location /的前面。
    最后的訪問效果如下圖:

    動靜分離效果圖


    Nginx高可用




    現在是所有請求先到nginx,然后通過nginx分發到不同的tomcat中。萬一這臺nginx宕機了,那就涼涼了,所以nginx需要配置高可用。

    nginx高可用原理圖

    如上圖,有兩個nginx,一個是主nginx,一個是備份nginx。它們倆對外提供一個虛擬IP,客戶端訪問的是虛擬IP。keepalived是一個軟件,它會監視nginx,如果正常,那么訪問主nginx,主宕機了,那么就切換到備份nginx。
    1、準備工作:

    • 在兩臺虛擬機上安裝nginx;

    • 在兩臺虛擬機上都安裝keepalived,直接執行yum -y install keepalived即可安裝,安裝完成后在etc/keepalived目錄下有其配置文件keepalived.conf

    2、配置高可用:

    • 修改keepalived.conf,將里面的內容全部刪掉,替換成下面的內容:

    #全局定義
    global_defs {
         notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL 
    }

    #檢測nginx是否宕機的腳本配置
    vrrp_script chk_http_port {
       script "/usr/local/src/nginx_check.sh" #腳本的路徑
       interval 2  #檢測腳本執行時間間隔
       weight  2
    }

    #虛擬ip相關配置
    vrrp_instance VI_1 {
        state MASTER #備份服務器上將此值改成BACKUP
        interface ens33 #centos7 執行 ip addr查看網卡
        virtual_router_id 51 #主備機此值需相同
        priority 100 #主備機取不同的優先級,主機大一些
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.0.105 #自定義一個虛擬IP
        }
    }
    • 編寫檢測腳本nginx_check.sh,放到上面配置的路徑中去。腳本內容如下:

    #!/bin/bash
    A=`ps -C nginx -no-header |wc -l`
    if [ $A -eq 0 ];then
       /usr/local/nginx/sbin/nginx
       sleep 2
       if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
          killall keepalived
       fi
    fi
    • 啟動兩臺服務器的nginx和keepalived。啟動keepalived的命令為systemctl start keepalived.service。

    3、測試:

    • 先用配置的虛擬ip進行訪問。比如我兩臺虛擬機的ip分別是103和104,我配置的虛擬IP是105,那么直接在瀏覽器訪問105,可以成功訪問到nginx則配置成功。

    • 在主服務器上執行ip addr命令,出現如下畫面,表示虛擬ip綁定成功:

      虛擬ip綁定成功
    • 把主服務器上的nginx和keepalived干掉,如果虛擬ip還可以正常訪問,那么說明配置成功。



    Nginx原理分析




    • nginx啟動后,有兩個進程,一個master,管理員;一個worker,真正執行任務的進程。其實一個master可以管理多個worker,當有請求進來了,master就告訴所有的worker,worker接到通知就開始爭搶。搶到了任務的worker再去執行具體的操作。

    • 一個master多個worker的好處是,比如我們可以在不重啟nginx的情況下執行nginx -s reload命令重新加載配置文件,這就是這樣設計的優點之一,即利于進行熱部署操作;每個worker是獨立的進程,即使有worker掛掉了,也還有其他worker能正常工作;

    • 因為每個worker都可以將一個cpu的性能發揮到極致,所以worker的數量設置成cpu的核數相等最為合適。設置方法就是在nginx.conf中修改如下配置的數值即可:

    worker_processes  1;
    • 發送一個請求,如果是請求靜態,會占用兩個連接,一個請求到worker,另一個將靜態資源返回給客戶端;如果請求動態資源,那么就是4個,因為worker和tomcat之間還有兩個。

    • nginx.conf中的如下配置是表示一個worker支持的最大連接數。

    worker_connections  1024;
    • worker的數量乘以每個worker支持的最大連接數,再去除以2和4,得到的就是nginx支持的最大并發數的區間。




    轉了嗎
    贊了嗎
    在看嗎

      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 午夜精品一区二区三区在线观看| 国产精品IGAO视频网网址| 中文字幕精品亚洲二区| 国产成人久久精品一区二区三区| 久久中文字幕一区二区| 亚洲欧美成人久久一区| 狠狠色噜噜狠狠狠狠AV| 西西人体44WWW高清大胆| 欧美熟妇性XXXX欧美熟人多毛| 国产suv精品一区二区四| 午夜无码区在线观看亚洲| 精品日韩亚洲AV无码一区二区三区| 成人网站免费观看永久视频下载| 日本福利一区二区精品| 国产精品自在线拍国产手机版| 婷婷综合久久中文字幕蜜桃三电影 | 久久午夜夜伦鲁鲁片免费无码影视| 成年女人碰碰碰视频播放| 综合色一色综合久久网| 又黄又爽又无遮挡免费的网站| 丝袜美腿一区二区三区| 免费观看一区二区三区| 99精品电影一区二区免费看| 久久99精品久久久久久动态图| 成人又黄又爽又色的视频 | 97无码人妻福利免费公开在线视频| 在线 欧美 中文 亚洲 精品| 日本午夜精品一区二区三区电影| 被拉到野外强要好爽| 亚洲欧洲日韩精品在线| 久久精品国产99国产精品严洲| 精品国产迷系列在线观看| 午夜成年男人免费网站| 成人片黄网站色大片免费观看| 人妻系列无码专区69影院| 欧美福利电影A在线播放| 熟女系列丰满熟妇AV| 国产成人午夜福利院| A男人的天堂久久A毛片| 国产成人一区二区三区视频免费 | 亚洲欧洲中文日韩久久AV乱码|