本篇文章為大家展示了怎么實現(xiàn)nginx的原理分析,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
清遠(yuǎn)ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
1. 了解一下在nginx使用中常見的信號處理
kill -SIGHUP $ngx_master_pid # 相當(dāng)于nginx -s reload 從新啟動新的work進(jìn)程kill -SIGTERM $ngx_work_pid # 重建指定nginx work進(jìn)程ID的進(jìn)程
對于nginx的master進(jìn)程來說可以接收到的信號:
以下四個信號是可以通過nginx命令與參數(shù)實現(xiàn)的
TERM,INT 表示立刻停止nginx進(jìn)程
QUIT 表示優(yōu)雅的停止nginx進(jìn)程,就是慢慢的停止nginx進(jìn)程,不要對用戶發(fā)送立刻結(jié)束連接,像tcp的reset復(fù)位請求這樣的報文
HUP 表示重載配置文件
USR1表示重新打開日志文件
以下兩個信號專門用于進(jìn)行nginx的熱部署的時候使用,但是只能通過linux命令行的kill實現(xiàn)
USR2 發(fā)送熱更新信號
WINCH 用于通知下線舊的work進(jìn)程
當(dāng)我們在命令行中使用nginx與參數(shù)實現(xiàn)對nginx的管理時,實質(zhì)上就是獲取當(dāng)前nginx運行的pid文件中的pid,然后通過命令行向pid發(fā)送對應(yīng)的信號
reload -> HUP
Reopen -> USR1
stop -> TERM
Quit -> QUIT
2. nginx在重載配置文件究竟做了什么?
思考優(yōu)雅的退出和立即退出有什么區(qū)別呢?你知道嗎?
1. 向master進(jìn)程發(fā)送HUP信號(reload命令)2. master進(jìn)程校驗配置語法是否正確(因此我們在進(jìn)行reload的時候,不一定非要先執(zhí)行一個`nginx -t`)3. master進(jìn)程打開新的監(jiān)聽端口(可能引入了https,監(jiān)聽了443,此時work就會共用打開的端口)4. master進(jìn)程用新配置啟動新的worker子進(jìn)程5. master進(jìn)程向老的worker子進(jìn)程發(fā)送Quit信號(在新的版本中nginx添加一個nginx shutdown timeout,這個就是在新老worker子進(jìn)程同時存在的時候,限制老的worker進(jìn)程最遲多久退出)6. 老worker進(jìn)程關(guān)閉監(jiān)聽句柄,處理完當(dāng)前連接后結(jié)束進(jìn)程
3. nginx熱升級的完整流程是什么樣的?
新的worker進(jìn)程升級出現(xiàn)問題,想要考慮回滾?
老的worker進(jìn)程一直退不掉?
升級了nginx之后,發(fā)現(xiàn)很多預(yù)期的功能不能使用,配置報錯?
當(dāng)我們在處理nginx的版本升級或者增加新的擴(kuò)展模塊的時候或多或少的會遇到這些問題,熟悉nginx升級原理很快解決這些問題。
1. 將舊nginx文件換成新的nginx文件(注意備份) 2. 向master進(jìn)程發(fā)送USR2信號3. master進(jìn)程修改pid文件名,加后綴.oldbin4. master進(jìn)程用新nginx文件啟動新master進(jìn)程5. 向老master進(jìn)程發(fā)送quit信號,關(guān)閉老的master進(jìn)程6. 回滾: 向老master發(fā)送HUP,向新master發(fā)送quit
4. 如何優(yōu)雅的關(guān)閉nignx的worker進(jìn)程?
如何優(yōu)雅的關(guān)閉連接呢?worker進(jìn)程可以識別當(dāng)前的進(jìn)程是否正在處理請求,若沒有處理請求的時候,就可以將連接進(jìn)行關(guān)閉,但是當(dāng)nginx代理websocket的協(xié)議的時候,是做不到這點的,因為在websocket后端通信的frame幀里面,nginx是不解析的,所以是不能識別的。當(dāng)nignx代理的是tcp請求的時候,因為無法判斷一個請求要經(jīng)歷多少報文才結(jié)束,因此也是不能識別進(jìn)程是否正在處理請求,但是對于Http請求,nginx是可以的。
1. 設(shè)置定時器 `worker_shutdown_timeout`,然后給進(jìn)程設(shè)置一個優(yōu)雅關(guān)閉的標(biāo)志位2. 關(guān)閉監(jiān)聽句柄不在接收新的連接3. 關(guān)閉空閑連接4. 在循環(huán)中等待全部連接關(guān)閉5. 退出進(jìn)程
上述內(nèi)容就是怎么實現(xiàn)nginx的原理分析,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
文章題目:怎么實現(xiàn)nginx的原理分析
網(wǎng)頁網(wǎng)址:http://aaarwkj.com/article48/gjodhp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計、建站公司、云服務(wù)器、定制網(wǎng)站、虛擬主機(jī)、域名注冊
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)