<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Loading

      【Nginx學習筆記】-初識Nginx

      Nginx中文文檔 - https://www.nginx.cn/doc/

      Nginx ("engine x") 是一個高性能的 HTTP 和 反向代理 服務器,也是一個 IMAP/POP3/SMTP 代理服務器。 Nginx 是由 Igor Sysoev 為俄羅斯訪問量第二的 Rambler.ru 站點開發的,第一個公開版本0.1.0發布于2004年10月4日。其將源代碼以類BSD許可證的形式發布,因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。

      Nginx 解決了服務器的C10K(就是在一秒之內連接客戶端的數目為10k即1萬)問題。它的設計不像傳統的服務器那樣使用線程處理請求,而是一個更加高級的機制—事件驅動機制,是一種異步事件驅動結構。它可以輕松在百萬并發連接下實現高吞吐量的Web服務,同時諸多應用場景下的問題都可以通過種種Nginx模塊得以解決,而我們所需的工作量也并不大

      Nginx 特點

      • 高并發請求的同時保持高效的服務

      • 熱部署

      • 低內存消耗/很高的可靠性

      • 處理響應請求很快

      • 非阻塞、高并發連接-IO多路復用epoll(IO復用)

      • 輕量級

        • 功能模塊少 - Nginx僅保留了HTTP需要的模塊,其他都用插件的方式,后天添加
        • 代碼模塊化 - 更適合二次開發,如阿里巴巴Tengine
      • CPU親和

        • 把CPU核心和Nginx工作進程綁定,把每個worker進程固定在一個CPU上執行,減少切換CPU的cache miss,從而提高性能。
      • Nginx接收用戶請求是異步的,即先將用戶請求全部接收下來,再一次性發送到后端Web服務器,極大減輕后端Web服務器的壓力。

      • 支持內置服務器檢測。Nginx能夠根據應用服務器處理頁面返回的狀態碼、超時信息等檢測服務器是否出現故障,并及時返回錯誤的請求重新提交到其它節點上

      • 采用Master/worker多進程工作模式

      Nginx 基本功能

      Nginx的功能包括基本HTTP功能和擴展功能。和Apache服務器一樣,Nginx服務器為了提供更多的功能并且能夠有效地擴展這些功能。每一個模塊都提供了一個功能,通過編譯這些功能模塊來實現功能的擴展

      1. 基本HTTP功能

      a)提供靜態文件和index文件,處理靜態文件,索引文件以及自動索引,打開文件描述符緩存;
      b)使用緩存加速反向代理,反向代理加速(無緩存),簡單的負載均衡和容錯;
      c)使用緩存機制加速遠程FastCGI,簡單的負載均衡和容錯;
      d)模塊化的結構。過濾器包括gzipping,byte ranges,chunked responses,以及 SSI-filter。在SSI過濾器中,到同一個 proxy 或者 FastCGI 的多個子請求并發處理;
      e)支持SSL 和 TLS SNI 支持;
      f)IMAP/POP3代理服務功能;
      g)使用外部 HTTP 認證服務器重定向用戶到 IMAP/POP3 后端;
      h)使用外部 HTTP 認證服務器認證用戶后連接重定向到內部的 SMTP 后端;

      1. 其他HTTP功能
        a)基于名稱和基于IP的虛擬服務器;
        b)支持Keep-alive和管道連接;
        c)靈活的配置和重新配置、在線升級的時候不用中斷客戶訪問的處理;
        d)訪問日志的格式,緩存日志寫入和快速日志輪循;
        e)3xx-5xx錯誤代碼重定向;
        f)速度限制

      Nginx 使用場景

      • 搭建靜態資源服務器
      • 反向代理分發后端服務(可以和nodejs搭配實現前后端分離)和跨域問題
      • 根據User Agent來重定向站點
      • 開發環境或測試環境切換(切換host)
      • url重寫,使用rewrie規則本地映射
      • 資源內容篡改
      • 獲取cookie做分流
      • 資源合并
      • gzip壓縮
      • 壓縮圖片
      • sourceMap調試

      Nginx 安裝/卸載

      下載地址:http://nginx.org/en/download.html

      Docker 方式運行

      docker run --name nginx -p 8080:80 -d nginx

      Ubuntu上安裝

      sudo apt-get install software-properties-common
      sudo add-apt-repository ppa:nginx/stable 
      sudo apt-get update
      sudo apt-get install nginx
      

      安裝完成后,檢查Nginx服務的狀態sudo systemctl status nginx 和 版本nginx -V

      訪問:http://localhost

      啟動時候若顯示端口80被占用: Starting nginx: [emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use),
      修改文件:/etc/nginx/sites-available/default,把 listen 后面的 80 端口號改為自己的端口,訪問是需要添加端口號。
      安裝完后如出現403錯誤,那可能是nginx配置文件里的網站路徑不正確

      卸載Nginx

      sudo apt-get remove nginx nginx-common # 卸載刪除除了配置文件以外的所有文件。
      sudo apt-get purge nginx nginx-common # 卸載所有東東,包括刪除配置文件。
      sudo apt-get autoremove # 在上面命令結束后執行,主要是卸載刪除Nginx的不再被使用的依賴包。
      sudo apt-get remove nginx-full nginx-common #卸載刪除兩個主要的包。
      

      Nginx 命令

      - sudo nginx #打開 nginx
      - nginx -s reload|reopen|stop|quit #重新加載配置|重啟|停止|退出 nginx
      - nginx -t #測試配置是否有語法錯誤
      
      nginx [-?hvVtq] [-s signal] [-c filename] [-p prefix] [-g directives]
      
      -?,-h : 打開幫助信息
      -v : 顯示版本信息并退出
      -V : 顯示版本和配置選項信息,然后退出
      -t : 檢測配置文件是否有語法錯誤,然后退出
      -q : 在檢測配置文件期間屏蔽非錯誤信息
      -s signal : 給一個 nginx 主進程發送信號:stop(停止), quit(退出), reopen(重啟), reload(重新加載配置文件)
      -p prefix : 設置前綴路徑(默認是:/usr/local/Cellar/nginx/1.2.6/)
      -c filename : 設置配置文件(默認是:/usr/local/etc/nginx/nginx.conf)
      -g directives : 設置配置文件外的全局指令
      

      驗證配置是否正確: nginx -t
      配置文件修改重裝載命令:nginx -s reload

      停止nginx: sudo systemctl stop nginx

      啟動nginx: sudo systemctl start nginx

      默認,nginx是隨著系統啟動的時候自動運行,sudo systemctl disable nginx可以禁止nginx開機啟動.

      重新配置nginx開機自動啟動: sudo systemctl enable nginx

      重啟nginx: sudo systemctl restart nginx

      平滑加載配置(不會斷開用戶訪問):sudo systemctl reload nginx

      • reload,重新加載的意思,reload會重新加載配置文件,nginx服務不會中斷,而且reload時會測試conf語法等,如果出錯會rollback用上一次正確配置文件保持正常運行。
      • restart,重啟,會重啟nginx服務。這個重啟會造成服務一瞬間的中斷,當然如果配置文件出錯會導致服務啟動失敗,那就是更長時間的服務中斷了。

      Nginx 目錄結構

      網站文件位置

      • /var/www/html: 網站文件存放的地方, 默認只有我們上面看到nginx頁面,可以通過改變nginx配置文件的方式來修改這個位置。

      服務器配置

      • /etc/nginx: nginx配置文件目錄。所有的nginx配置文件都在這里。
      • /etc/nginx/nginx.conf: Nginx的主配置文件. 可以修改他來改變nginx的全局配置。
      • /etc/nginx/sites-available/: 這個目錄存儲每一個網站的"server blocks"。nginx通常不會使用這些配置,除非它們陪連接到 sites-enabled 目錄 (see below)。一般所有的server block 配置都在這個目錄中設置,然后軟連接到別的目錄 。
      • /etc/nginx/sites-enabled/: 這個目錄存儲生效的 "server blocks" 配置. 通常,這個配置都是鏈接到 sites-available目錄中的配置文件
      • /etc/nginx/snippets: 這個目錄主要可以包含在其它nginx配置文件中的配置片段。重復的配置都可以重構為配置片段。

      日志文件

      • /var/log/nginx/access.log: 每一個訪問請求都會記錄在這個文件中,除非你做了其它設置
      • /var/log/nginx/error.log: 任何Nginx的錯誤信息都會記錄到這個文件中

      Nginx熱部署

      所謂熱部署,就是配置文件nginx.conf修改后,不需要stop Nginx,不需要中斷請求,就能讓配置文件生效!(nginx -s reload 重新加載/nginx -t檢查配置/nginx -s stop)

      通過上文我們已經知道worker進程負責處理具體的請求,那么如果想達到熱部署的效果,可以想象:

      方案一: 修改配置文件nginx.conf后,主進程master負責推送給woker進程更新配置信息,woker進程收到信息后,更新進程內部的線程信息。(有點valatile的味道)

      方案二: 修改配置文件nginx.conf后,重新生成新的worker進程,當然會以新的配置進行處理請求,而且新的請求必須都交給新的worker進程,至于老的worker進程,等把那些以前的請求處理完畢后,kill掉即可。

      Nginx采用的就是方案二來達到熱部署的!

      Nginx 運行原理

      Master-Worker模式

      啟動Nginx后,其實就是在80端口啟動了Socket服務進行監聽,如圖所示,Nginx涉及Master進程和Worker進程

      Master進程的作用是?

      • 讀取并驗證配置文件nginx.conf;管理worker進程;

      Worker進程的作用是?

      • 每一個Worker進程都維護一個線程(避免線程切換),處理連接和請求;注意Worker進程的個數由配置文件決定,一般和CPU個數相關(有利于進程切換),配置幾個就有幾個Worker進程。

      首先,Nginx在啟動時,會解析配置文件,得到需要監聽的端口與IP地址,然后在Nginx的master進程里面,先初始化好這個監控的socket(創建socket,設置addrreuse等選項,綁定到指定的IP地址端口,再listen),然后再fork(一個現有進程可以調用fork函數創建一個新進程。由fork創建的新進程被稱為子進程 )出多個子進程出來,然后子進程會競爭accept新的連接。

      此時,客戶端就可以向Nginx發起連接了。當客戶端與Nginx進行三次握手,與Nginx建立好一個連接后,某一個子進程會accept成功,得到這個建立好的連接的socket,然后創建Nginx對連接的封裝,即ngx_connection_t結構體。

      接著,設置讀寫事件處理函數并添加讀寫事件來與客戶端進行數據的交換。最后,Nginx或客戶端來主動關掉連接

      Nginx如何做到高并發下的高效處理?

      上文已經提及Nginx的worker進程個數與CPU綁定、worker進程內部包含一個線程高效回環處理請求,這的確有助于效率,但這是不夠的。

      作為專業的程序員,我們可以開一下腦洞:BIO/NIO/AIO、異步/同步、阻塞/非阻塞...

      要同時處理那么多的請求,要知道,有的請求需要發生IO,可能需要很長時間,如果等著它,就會拖慢worker的處理速度。

      Nginx采用了Linux的epoll模型,epoll模型基于事件驅動機制,它可以監控多個事件是否準備完畢,如果OK,那么放入epoll隊列中,這個過程是異步的。worker只需要從epoll隊列循環處理即可。

      Nginx 高可用

      Nginx既然作為入口網關,很重要,如果出現單點問題,顯然是不可接受的。

      答案是:Keepalived+Nginx實現高可用。

      Keepalived是一個高可用解決方案,主要是用來防止服務器單點發生故障,可以通過和Nginx配合來實現Web服務的高可用。(其實,Keepalived不僅僅可以和Nginx配合,還可以和很多其他服務配合)

      Keepalived+Nginx實現高可用的思路:
      第一:請求不要直接打到Nginx上,應該先通過Keepalived(這就是所謂虛擬IP,VIP)
      第二:Keepalived應該能監控Nginx的生命狀態(提供一個用戶自定義的腳本,定期檢查Nginx進程狀態,進行權重變化,,從而實現Nginx故障切換)

      posted @ 2021-01-12 00:34  DevOps在路上  閱讀(869)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 亚洲色婷婷综合开心网| 久久不卡精品| 男人狂桶女人出白浆免费视频| 精品激情视频一区二区三区| 国产一区在线观看不卡| 中文字幕日韩精品国产| 亚洲国产精品高清久久久| 久久先锋男人AV资源网站| 亚洲精品无码久久千人斩| 日韩一区二区三区水蜜桃| 国产香蕉尹人在线视频你懂的| 国产普通话对白刺激| 国产免费午夜福利在线观看 | 亚洲a人片在线观看网址| 亚洲中文字幕无码爆乳| 激情国产一区二区三区四区| 天海翼激烈高潮到腰振不止| 国产乱老熟女乱老熟女视频| 国产精品一起草在线观看| 亚洲日韩在线中文字幕第一页| 国产精品视频亚洲二区| 成人精品网一区二区三区| 欧美人禽zozo动人物杂交| 日本九州不卡久久精品一区| 99精品国产中文字幕| 莎车县| 亚洲乱色一区二区三区丝袜| 性饥渴少妇AV无码毛片| 亚洲中文字幕无码一区日日添| 久久精品人妻无码一区二区三区| 国产仑乱无码内谢| 少妇粗大进出白浆嘿嘿视频| 亚洲色欲色欲WWW在线丝| 欧美成人看片黄A免费看| 免费国产一区二区不卡| 国模一区二区三区私拍视频| 中文字幕亚洲综合久久综合| 国内精品人妻无码久久久影院导航 | 亚洲第一视频区| 国产精品三级黄色小视频| 亚洲人成电影网站色mp4|