乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      玩轉Nginx

       貪挽懶月 2022-06-20 發(fā)布于廣東

      本文內容包括:

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

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

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

      • nginx配置實例之高可用;

      • nginx原理分析



      nginx基本概念




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

      2、反向代理:

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

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

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

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

      負載均衡示意圖

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



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




      1、安裝nginx:

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

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

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

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

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

        nginx啟動成功

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

      • ./nginx:啟動nginx

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

      • ./nginx -s quit:平穩(wěn)關閉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處理的并發(fā)數量,值越大,能處理的并發(fā)量就越多。

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

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



      Nginx實現(xiàn)反向代理




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

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

      配置反向代理

      3、代理多個端口:
      上面是將www.xixihaha.com的請求轉發(fā)到8080端口了,現(xiàn)在像將www.xixihaha.com/xi的請求轉發(fā)到8081端口,www.xixihaha.com/ha的請求轉發(fā)到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和剛才配置的轉發(fā)到tomcat歡迎頁的可以同時存在。這個server配置location的時候用的類似于正則表達式,~ /xi/就表示路徑中有xi的就轉發(fā)到8081端口。

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

        反向代理


      Nginx實現(xiàn)負載均衡




      1、準備工作:
      上面說了負載均衡就是將多個請求分配給不同的服務器,減輕單一服務器的壓力。現(xiàn)在我們先在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;

      總體配置如下圖:

      負載均衡配置

      配置好以后,在瀏覽器訪問就會發(fā)現(xiàn),第一次訪問的是8081,第二次訪問的是8082,以此輪詢。如果你用谷歌瀏覽器訪問,發(fā)現(xiàn)并沒有輪詢,那是因為谷歌瀏覽器把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:將請求轉發(fā)給連接數最少的服務器(一樣可以加權)。配置方法如下:

      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:這是第三方策略,服務器響應時間最短的優(yōu)先分配。配置方法:

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


      Nginx實現(xiàn)動靜分離




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

      1、實現(xiàn)方式:

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

      • 將動靜態(tài)文件一起混合發(fā)布,再通過nginx來分開。

      2、準備工作:
      在linux上準備一些靜態(tài)資源,比如在/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高可用




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

      nginx高可用原理圖

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

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

      • 在兩臺虛擬機上都安裝keepalived,直接執(zhí)行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  #檢測腳本執(zhí)行時間間隔
         weight  2
      }

      #虛擬ip相關配置
      vrrp_instance VI_1 {
          state MASTER #備份服務器上將此值改成BACKUP
          interface ens33 #centos7 執(zhí)行 ip addr查看網卡
          virtual_router_id 51 #主備機此值需相同
          priority 100 #主備機取不同的優(yōu)先級,主機大一些
          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則配置成功。

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

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



      Nginx原理分析




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

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

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

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

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

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




      轉了嗎
      贊了嗎
      在看嗎

        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多