Nginx:很正經(jīng)的學(xué)習(xí)筆記(一)

歡迎關(guān)注公眾號【因卓誒】

此文已同步到因卓誒博客:

Nginx:很正經(jīng)的學(xué)習(xí)筆記(一) - 因卓誒-愛分享愛原創(chuàng)的技術(shù)博客 ~ 個人博客www.yinzhuoei.com

Nginx是一款高性能服務(wù)器,最近這幾年非持龈火,以輕量且高并發(fā)巷懈,高性能著稱,那么此筆記將不會從0開始講解API慌洪,而是會從各種問題入手顶燕,通過問題學(xué)習(xí)nginx凑保。


特點(diǎn):

  1. IO多路復(fù)用
  2. 高性能
  3. 高并發(fā)
  4. 占用系統(tǒng)資源少

Nginx作為一個WEB服務(wù)器,有著大好的未來涌攻,市場份額非常給力欧引,同時也是份額上升速度最快的web服務(wù)器。

Nginx作為前端來說恳谎,需要學(xué)習(xí)什么芝此?我們只需要學(xué)習(xí)Nginx在應(yīng)用部署,反向代理因痛,處理資源的進(jìn)程婚苹,亦或者是搭建網(wǎng)站的基礎(chǔ)知識,如果你還沒有一個blog鸵膏,那么就從現(xiàn)在開始學(xué)習(xí)nginx并且搭建你的第一個網(wǎng)站吧膊升。


反向代理與正向代理

我們在平時上外網(wǎng)的時候,比如谷歌谭企,youtube廓译,twitter,Ins等债查,如果使用我們內(nèi)地網(wǎng)絡(luò)非区,是訪問不成功的,只有在香港臺灣或者境外才能訪問到類似的外網(wǎng)盹廷。那我們需要通過內(nèi)地網(wǎng)絡(luò)去訪問外網(wǎng)只能通過一個proxy代理去做一個請求的轉(zhuǎn)發(fā)征绸,我們的內(nèi)地網(wǎng)絡(luò)請求在到達(dá)外網(wǎng)地址之前,會經(jīng)過一層代理速和,這個代理會去請求外網(wǎng)歹垫,請求成功之后會把頁面呈現(xiàn)給我們的客戶端。

在這個過程中颠放,外網(wǎng)服務(wù)器不知道我們的內(nèi)地網(wǎng)絡(luò)是誰排惨,只知道代理地址,所以對于外網(wǎng)服務(wù)器來說碰凶,請求的真實客戶端是看不到的暮芭。那么這個過程就叫做 正向代理,proxy代理的是客戶端欲低。

反向代理是相反的辕宏,代理的是服務(wù)端,對于客戶端而言砾莱,訪問的服務(wù)器僅僅是多個真實服務(wù)器的一個代理而已瑞筐,所以對于客戶端用戶而言,真實服務(wù)器的信息是不可見的腊瑟。這樣的過程也就是反向代理聚假,proxy代理的是服務(wù)端块蚌。

Nginx如何去做反向代理?

server{        listen 80;        server_name nginx.yinzhuoei.com;        location / {               proxy_pass http://yinzhuoei.com;        }}

其他的proxy配置:

proxy_set_header :在將客戶端請求發(fā)送給后端服務(wù)器之前膘格,更改來自客戶端的請求頭信息峭范。proxy_connect_timeout:配置Nginx與后端代理服務(wù)器嘗試建立連接的超時時間。proxy_read_timeout : 配置Nginx向后端服務(wù)器組發(fā)出read請求后瘪贱,等待相應(yīng)的超時時間纱控。proxy_send_timeout:配置Nginx向后端服務(wù)器組發(fā)出write請求后,等待相應(yīng)的超時時間菜秦。proxy_redirect :用于修改后端服務(wù)器返回的響應(yīng)頭中的Location和Refresh甜害。

解決跨域

通過反向代理解決跨域:

server{   listen 3003;   server_name localhost;      ##  = /表示精確匹配路徑為/的url   location = / {       proxy_pass http://localhost:5500;   }   ##  若 proxy_pass最后為/ 如http://localhost:3000/;匹配/no/son,則真實匹配為http://localhost:3000/son   location /no {       proxy_pass http://localhost:3000;   }   ##  /ok/表示精確匹配以ok開頭的url喷户,/ok2是匹配不到的唾那,/ok/son則可以   location /ok/ {       proxy_pass http://localhost:3000;   }}

加header頭允許跨域:

server{    listen 3002;    server_name localhost;    location /ok {        proxy_pass http://localhost:3000;        #   指定允許跨域的方法,*代表所有        add_header Access-Control-Allow-Methods *;        #   預(yù)檢命令的緩存褪尝,如果不緩存每次會發(fā)送兩次請求        add_header Access-Control-Max-Age 3600;        #   帶cookie請求需要加上這個字段闹获,并設(shè)置為true        add_header Access-Control-Allow-Credentials true;        #   表示允許這個域跨域調(diào)用(客戶端發(fā)送請求的域名和端口)         #   $http_origin動態(tài)獲取請求客戶端請求的域   不用*的原因是帶cookie的請求不支持*號        add_header Access-Control-Allow-Origin $http_origin;        #   表示請求頭的字段 動態(tài)獲取        add_header Access-Control-Allow-Headers         $http_access_control_request_headers;        #   OPTIONS預(yù)檢命令,預(yù)檢命令通過時才發(fā)送請求        #   檢查請求的類型是不是預(yù)檢命令        if ($request_method = OPTIONS){            return 200;        }    }}

Master&Woker模式

Nginx啟動之后河哑,啟動了80端口進(jìn)行服務(wù)監(jiān)聽避诽,那么進(jìn)程中就存在一個Mater主進(jìn)程和多個Woker進(jìn)程;

Master進(jìn)程的作用就是:讀取&驗證nginx.conf配置文件并且管理多個woker進(jìn)程璃谨;接受外部信號沙庐;監(jiān)控Woker,如果Woker掛掉佳吞,將自動重啟Woker拱雏;

Woker進(jìn)程的作用就是:多個Woker會攔截所有的請求并做出處理;每一個woker進(jìn)程維護(hù)一個線程底扳;woker的個數(shù)和CPU有關(guān)铸抑,從nginx.conf配置woker個數(shù),配置幾個就是幾個衷模,但是要避免配置過多鹊汛,要充分利用CPU;

一個請求到響應(yīng)的流程:

  1. Nginx啟動阱冶,Matster進(jìn)程根據(jù)nginx.conf初始化刁憋;初始化監(jiān)聽socket;fork出多個woker進(jìn)程;
  2. 發(fā)起請求
  3. woker進(jìn)程們一起競爭,勝出者通過三次握手,建立socket連接雹嗦,處理請求。

如何做熱部署呢报强?

熱部署就和前端熱部署一樣的性質(zhì)瞒御,即修改配置文件钾腺,不需要重啟服務(wù)器就可以使用最新的配置泥耀。

通過這樣的一個命令即可熱部署,無需重啟蛔添,隨時改隨時用痰催。

一般情況下,我們做熱部署可以有幾個方案迎瞧,比如前端夸溶,webpack的本地開發(fā)工具,webpack-dev-server凶硅,即本地啟動一個服務(wù)缝裁,開啟一個websocket,當(dāng)我們的文件改動足绅,就重新加載這個css/js捷绑。

而nginx也是同樣的方式么?我們的主進(jìn)程master去發(fā)布一個修改請求氢妈,然后woker去訂閱這個消息粹污,實現(xiàn)類似這樣的熱部署?

其實不然首量,nginx使用的是如下的方案壮吩,當(dāng)master監(jiān)聽到配置文件的更改,會創(chuàng)建一批新的woker去執(zhí)行新的請求加缘,老的woker進(jìn)程會在任務(wù)處理完畢之后鸭叙,再由master殺掉進(jìn)程。


如何做到高并發(fā)拣宏?

Nginx采用多進(jìn)程+異步非阻塞方式(IO多路復(fù)用):

關(guān)于異步和同步沈贝,我需要做一些概念上的整理;

同步和異步指的是消息的通信機(jī)制蚀浆,我們做web開發(fā)是最能理解同步異步的區(qū)別的缀程,因為我們天天和接口打交道;

1)所謂同步指的就是發(fā)起一個請求/調(diào)用市俊,在沒有得到結(jié)果之前就不會返回杨凑,一旦得到結(jié)果就立即返回;

2)所謂異步指的就是發(fā)起一個請求/調(diào)用摆昧,調(diào)用者不會主動去care被調(diào)用者撩满,而被調(diào)用者拿到結(jié)果之后會通知調(diào)用者

而阻塞非阻塞指的是程序在等待調(diào)用結(jié)果時的狀態(tài)

1)阻塞調(diào)用指的就是,結(jié)果返回之前當(dāng)前線程被掛起伺帘,調(diào)用線程在返回之后才返回昭躺;那么掛起的這個線程是會被阻塞的;

2)非阻塞調(diào)用指的就是伪嫁,不能立刻得到結(jié)果之前领炫,線程是不會被掛起的,仍然可以做其他事情张咳;那么非阻塞調(diào)用如何知道得到結(jié)果了呢帝洪,需要定時去check的;

關(guān)于阻塞IO和非阻塞IO等我總結(jié)完了再說哈脚猾,還有關(guān)于Nginx的IO多路復(fù)用Epoll模型葱峡,這個是延申知識了,我也需要學(xué)習(xí)整理哈龙助,現(xiàn)在還不清楚這一塊的東西砰奕。

Nginx后續(xù)章節(jié)過段時間發(fā),中間要發(fā)幾篇shadowDom和劍指題解的文章提鸟,大家耐心等待...


學(xué)習(xí)資料如下:

Nginx如何做到高性能支撐起高并發(fā)

8分鐘帶你深入淺出搞懂Nginx

怎樣理解阻塞非阻塞與同步異步的區(qū)別军援?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市沽一,隨后出現(xiàn)的幾起案子盖溺,更是在濱河造成了極大的恐慌,老刑警劉巖铣缠,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烘嘱,死亡現(xiàn)場離奇詭異,居然都是意外死亡蝗蛙,警方通過查閱死者的電腦和手機(jī)蝇庭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捡硅,“玉大人哮内,你說我怎么就攤上這事∽尘拢” “怎么了北发?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長喷屋。 經(jīng)常有香客問我琳拨,道長,這世上最難降的妖魔是什么屯曹? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任狱庇,我火速辦了婚禮惊畏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘密任。我一直安慰自己颜启,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布浪讳。 她就那樣靜靜地躺著缰盏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪淹遵。 梳的紋絲不亂的頭發(fā)上乳规,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機(jī)與錄音合呐,去河邊找鬼。 笑死笙以,一個胖子當(dāng)著我的面吹牛淌实,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播猖腕,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼拆祈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了倘感?” 一聲冷哼從身側(cè)響起放坏,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎老玛,沒想到半個月后淤年,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蜡豹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年麸粮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片镜廉。...
    茶點(diǎn)故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡弄诲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出娇唯,到底是詐尸還是另有隱情齐遵,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布塔插,位于F島的核電站梗摇,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏佑淀。R本人自食惡果不足惜留美,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一彰檬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧谎砾,春花似錦逢倍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至挚币,卻和暖如春亮蒋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背妆毕。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工慎玖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人笛粘。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓趁怔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親薪前。 傳聞我的和親對象是個殘疾皇子润努,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容

  • Nginx ("engine x")是一個高性能的HTTP和反向代理web服務(wù)器,特點(diǎn)是占有內(nèi)存少示括,并發(fā)能力強(qiáng)铺浇。 ...
    dev_winner閱讀 965評論 0 19
  • Nginx概述 Nginx (engine x) 是一款自由的、開源的垛膝、高性能的HTTP服務(wù)器和反向代理服務(wù)器軟件...
    geekdeedy閱讀 1,059評論 0 1
  • I/O模型: 阻塞型鳍侣、非阻塞型、復(fù)用型吼拥、信號驅(qū)動型拱她、異步 同步/異步:關(guān)注消息通知機(jī)制 消息通知:同步:等待對方返...
    Net夜風(fēng)閱讀 2,006評論 0 1
  • 一.Nginx是什么,常用于哪些場景及其優(yōu)點(diǎn)是什么扔罪?秉沼? 高性能web服務(wù)器,常用于 靜態(tài)web服務(wù)器(動靜分離)矿酵、...
    只猿閱讀 1,086評論 0 0
  • 今天感恩節(jié)哎唬复,感謝一直在我身邊的親朋好友。感恩相遇全肮!感恩不離不棄敞咧。 中午開了第一次的黨會,身份的轉(zhuǎn)變要...
    迷月閃星情閱讀 10,562評論 0 11