<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          適合小白的 Nginx 學(xué)習(xí)手冊 ( 收藏了 )

          共 5523字,需瀏覽 12分鐘

           ·

          2021-03-22 15:21

           △點擊上方Python貓”關(guān)注 ,回復(fù)“1”領(lǐng)取電子書
          Nginx 是一個高性能的 HTTP 和反向代理服務(wù)器,特點是占用內(nèi)存少,并發(fā)能力強,事實上 Nginx 的并發(fā)能力確實在同類型的網(wǎng)頁服務(wù)器中表現(xiàn)較好。

          Nginx 專為性能優(yōu)化而開發(fā),性能是其最重要的要求,十分注重效率,有報告 Nginx 能支持高達 50000 個并發(fā)連接數(shù)。

          01

          Nginx 知識網(wǎng)結(jié)構(gòu)圖

          Nginx 的知識網(wǎng)結(jié)構(gòu)圖如下:

          02

          反向代理

          正向代理:局域網(wǎng)中的電腦用戶想要直接訪問網(wǎng)絡(luò)是不可行的,只能通過代理服務(wù)器來訪問,這種代理服務(wù)就被稱為正向代理。
          反向代理:客戶端無法感知代理,因為客戶端訪問網(wǎng)絡(luò)不需要配置,只要把請求發(fā)送到反向代理服務(wù)器,由反向代理服務(wù)器去選擇目標(biāo)服務(wù)器獲取數(shù)據(jù),然后再返回到客戶端。
          此時反向代理服務(wù)器和目標(biāo)服務(wù)器對外就是一個服務(wù)器,暴露的是代理服務(wù)器地址,隱藏了真實服務(wù)器 IP 地址。
          03
          負載均衡
          客戶端發(fā)送多個請求到服務(wù)器,服務(wù)器處理請求,有一些可能要與數(shù)據(jù)庫進行交互,服務(wù)器處理完畢之后,再將結(jié)果返回給客戶端。
          普通請求和響應(yīng)過程如下圖:
          但是隨著信息數(shù)量增長,訪問量和數(shù)據(jù)量飛速增長,普通架構(gòu)無法滿足現(xiàn)在的需求。
          我們首先想到的是升級服務(wù)器配置,可以由于摩爾定律的日益失效,單純從硬件提升性能已經(jīng)逐漸不可取了,怎么解決這種需求呢?
          我們可以增加服務(wù)器的數(shù)量,構(gòu)建集群,將請求分發(fā)到各個服務(wù)器上,將原來請求集中到單個服務(wù)器的情況改為請求分發(fā)到多個服務(wù)器,也就是我們說的負載均衡。
          圖解負載均衡:
          假設(shè)有 15 個請求發(fā)送到代理服務(wù)器,那么由代理服務(wù)器根據(jù)服務(wù)器數(shù)量,平均分配,每個服務(wù)器處理 5 個請求,這個過程就叫做負載均衡。

          04

          動靜分離

          為了加快網(wǎng)站的解析速度,可以把動態(tài)頁面和靜態(tài)頁面交給不同的服務(wù)器來解析,加快解析的速度,降低由單個服務(wù)器的壓力。
          動靜分離之前的狀態(tài):
          動靜分離之后:
          06
          Nginx安裝

          Nginx 如何在 Linux 安裝

          參考鏈接:
          https://blog.csdn.net/yujing1314/article/details/97267369

          Nginx 常用命令

          查看版本:
          ./nginx -v
          啟動:
          ./nginx
          關(guān)閉(有兩種方式,推薦使用 ./nginx -s quit):
           ./nginx -s stop
           ./nginx -s quit
          重新加載 Nginx 配置:
          ./nginx -s reload

          Nginx 的配置文件

          配置文件分三部分組成:
          ①全局塊
          從配置文件開始到 events 塊之間,主要是設(shè)置一些影響 Nginx 服務(wù)器整體運行的配置指令。
          并發(fā)處理服務(wù)的配置,值越大,可以支持的并發(fā)處理量越多,但是會受到硬件、軟件等設(shè)備的制約。
          ②events 塊
          影響 Nginx 服務(wù)器與用戶的網(wǎng)絡(luò)連接,常用的設(shè)置包括是否開啟對多 workprocess 下的網(wǎng)絡(luò)連接進行序列化,是否允許同時接收多個網(wǎng)絡(luò)連接等等。
          支持的最大連接數(shù):
          ③HTTP 塊
          諸如反向代理和負載均衡都在此配置。
          location[ = | ~ | ~* | ^~] url{

          }
          location 指令說明,該語法用來匹配 url,語法如上
          • =:用于不含正則表達式的 url 前,要求字符串與 url 嚴(yán)格匹配,匹配成功就停止向下搜索并處理請求。
          • ~:用于表示 url 包含正則表達式,并且區(qū)分大小寫。
          • ~*:用于表示 url 包含正則表達式,并且不區(qū)分大小寫。
          • ^~:用于不含正則表達式的 url 前,要求 Nginx 服務(wù)器找到表示 url 和字符串匹配度最高的 location 后,立即使用此 location 處理請求,而不再匹配。
          • 如果有 url 包含正則表達式,不需要有 ~ 開頭標(biāo)識。

          07

          反向代理實戰(zhàn)

          ①配置反向代理

          目的:在瀏覽器地址欄輸入地址 www.123.com 跳轉(zhuǎn) Linux 系統(tǒng) Tomcat 主頁面。
          ②具體實現(xiàn)
          先配置 Tomcat,因為比較簡單,此處不再贅敘,并在 Windows 訪問:

          具體流程如下圖:

          修改之前:
          配置如下:
          再次訪問:
          ③反向代理 2
          目標(biāo):
          • 訪問 http://192.168.25.132:9001/edu/ 直接跳轉(zhuǎn)到 192.168.25.132:8080
          • 訪問 http://192.168.25.132:9001/vod/ 直接跳轉(zhuǎn)到 192.168.25.132:8081
          準(zhǔn)備:配置兩個 Tomcat,端口分別為 8080 和 8081,都可以訪問,端口修改配置文件即可。

          新建文件內(nèi)容分別添加 8080!!!和 8081!!!

          響應(yīng)如下圖:

          具體配置如下:
          重新加載 Nginx:
          ./nginx -s reload
          訪問:
          實現(xiàn)了同一個端口代理,通過 edu 和 vod 路徑的切換顯示不同的頁面。
          反向代理小結(jié)
          第一個例子:瀏覽器訪問 www.123.com,由 host 文件解析出服務(wù)器 ip 地址 192.168.25.132 www.123.com。
          然后默認訪問 80 端口,而通過 Nginx 監(jiān)聽 80 端口代理到本地的 8080 端口上,從而實現(xiàn)了訪問 www.123.com,最終轉(zhuǎn)發(fā)到 tomcat 8080 上去。
          第二個例子:
          • 訪問 http://192.168.25.132:9001/edu/ 直接跳轉(zhuǎn)到 192.168.25.132:8080
          • 訪問 http://192.168.25.132:9001/vod/ 直接跳轉(zhuǎn)到 192.168.25.132:8081
          實際上就是通過 Nginx 監(jiān)聽 9001 端口,然后通過正則表達式選擇轉(zhuǎn)發(fā)到 8080 還是 8081 的 Tomcat 上去。

          08
          負載均衡實戰(zhàn)
          ①修改 nginx.conf,如下圖:
          ②重啟 Nginx:
          ./nginx -s reload
          ③在 8081 的 Tomcat 的 webapps 文件夾下新建 edu 文件夾和 a.html 文件,填寫內(nèi)容為 8081!!!!
          ④在地址欄回車,就會分發(fā)到不同的 Tomcat 服務(wù)器上:

          負載均衡方式如下:
          • 輪詢(默認)。
          • weight,代表權(quán),權(quán)越高優(yōu)先級越高。
          • fair,按后端服務(wù)器的響應(yīng)時間來分配請求,相應(yīng)時間短的優(yōu)先分配
          • ip_hash,每個請求按照訪問 ip 的 hash 結(jié)果分配,這樣每一個訪客固定的訪問一個后端服務(wù)器,可以解決 Session 的問題。



          09

          動靜分離實戰(zhàn)

          什么是動靜分離?把動態(tài)請求和靜態(tài)請求分開,不是講動態(tài)頁面和靜態(tài)頁面物理分離,可以理解為 Nginx 處理靜態(tài)頁面,Tomcat 處理動態(tài)頁面。

          動靜分離大致分為兩種:
          • 純粹將靜態(tài)文件獨立成單獨域名放在獨立的服務(wù)器上,也是目前主流方案。
          • 將動態(tài)跟靜態(tài)文件混合在一起發(fā)布,通過 Nginx 分開。

          動靜分離圖析:

          實戰(zhàn)準(zhǔn)備,準(zhǔn)備靜態(tài)文件:
          配置 Nginx,如下圖:

          Nginx 高可用

          如果 Nginx 出現(xiàn)問題:
          解決辦法:

          前期準(zhǔn)備:
          • 兩臺 Nginx 服務(wù)器
          • 安裝 Keepalived
          • 虛擬 ip

          安裝 Keepalived:

          [root@192 usr]yum install keepalived -y
          [root@192 usr]rpm -q -a keepalived
          keepalived-1.3.5-16.el7.x86_64
          修改配置文件:
          [root@192 keepalived]# cd /etc/keepalived
          [root@192 keepalived]# vi keepalived.conf
          分別將如下配置文件復(fù)制粘貼,覆蓋掉 keepalived.conf,虛擬 ip 為 192.168.25.50。
          對應(yīng)主機 ip 需要修改的是:
          • smtp_server 192.168.25.147(主)smtp_server 192.168.25.147(備)
          • state MASTER(主) state BACKUP
          global_defs {
             notification_email {
               [email protected]
               [email protected]
               [email protected]
             }
             notification_email_from [email protected]
             smtp_server 192.168.25.147
             smtp_connect_timeout 30
             router_id LVS_DEVEL # 訪問的主機地址
          }

          vrrp_script chk_nginx {
            script "/usr/local/src/nginx_check.sh"  # 檢測文件的地址
            interval 2   # 檢測腳本執(zhí)行的間隔
            weight 2   # 權(quán)重
          }

          vrrp_instance VI_1 {
              state BACKUP    # 主機MASTER、備機BACKUP    
              interface ens33   # 網(wǎng)卡
              virtual_router_id 51 # 同一組需一致
              priority 90  # 訪問優(yōu)先級,主機值較大,備機較小
              advert_int 1
              authentication {
                  auth_type PASS
                  auth_pass 1111
              }
              virtual_ipaddress {
                  192.168.25.50  # 虛擬ip
              }
          }
          啟動代碼如下:
          [root@192 sbin]# systemctl start keepalived.service
          訪問虛擬 ip 成功:
          關(guān)閉主機 147 的 Nginx 和 Keepalived,發(fā)現(xiàn)仍然可以訪問。

          原理解析

          如下圖,就是啟動了一個 master,一個 worker,master 是管理員,worker是具體工作的進程。
          worker 如何工作?如下圖:
          小結(jié)
          worker 數(shù)應(yīng)該和 CPU 數(shù)相等;一個 master 多個 worker 可以使用熱部署,同時 worker 是獨立的,一個掛了不會影響其他的。

          全棧開發(fā)者社區(qū)

          來源:https://reurl.cc/5oOQ3R

          Python貓技術(shù)交流群開放啦!群里既有國內(nèi)一二線大廠在職員工,也有國內(nèi)外高校在讀學(xué)生,既有十多年碼齡的編程老鳥,也有中小學(xué)剛剛?cè)腴T的新人,學(xué)習(xí)氛圍良好!想入群的同學(xué),請在公號內(nèi)回復(fù)『交流群』,獲取貓哥的微信(謝絕廣告黨,非誠勿擾!)~

          近期熱門文章推薦:

          從 Python 列表的特性來探究其底層實現(xiàn)機制
          天啦嚕!Python多線程居然是騙人的?
          解密 Python 中的對象模型
          Python 為什么不支持 switch 語句?
          耗時兩年,我終于出了一本電子書!

          感謝創(chuàng)作者的好文


          瀏覽 39
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本中文不卡在线 | 波多野结衣无码一区 | 亚洲最新AV网站 | 亚洲视频成人视频 | 亚洲黄级aaa |