从入门到实践,快速掌握 Nginx 研发
Nginx?是一種非常流行的 Web 服務(wù)器軟件,全球超過 30%的網(wǎng)站都在 Nginx 上運(yùn)行,如騰訊、淘寶、百度、京東、新浪、網(wǎng)易等。
對(duì)于開發(fā)來說,我們?cè)诠ぷ髦谢蚨嗷蛏俣紩?huì)遇到 web 性能優(yōu)化、高并發(fā)等問題,而 Nginx 是一個(gè)萬能藥,它具備高性能、高擴(kuò)展性、高可靠性、低內(nèi)存消耗等優(yōu)勢(shì),不管是個(gè)人建立網(wǎng)站、博客,還是進(jìn)行互聯(lián)網(wǎng)應(yīng)用開發(fā),都可以輕松應(yīng)對(duì)。
我們都知道 Nginx 好用,但大多數(shù)人對(duì) Nginx 的理解和使用只停留在初步階段,并沒有挖掘出 Nginx 的效能。我們收集了一些大家使用 Nginx 遇到的困惑,貼幾個(gè):
- 一開始公司就讓我來配置服務(wù)器,真的懵了,原理也不大懂,網(wǎng)上看了一堆資料,沒個(gè)系統(tǒng)化,到底要怎么學(xué)?
- Nginx 處理 HTTP 請(qǐng)求需要經(jīng)過哪 11 個(gè)階段啊?!
- 如何用 Nginx 系統(tǒng)編寫 HTTP 模塊?
實(shí)驗(yàn)樓上線了一門《Nginx 網(wǎng)絡(luò)模塊編寫入門》課程,或許可以幫助到有系統(tǒng)學(xué)習(xí)Nginx 需求的同學(xué)們。
課程從研發(fā)的角度,系統(tǒng)介紹了 Nginx 網(wǎng)絡(luò)模塊的編程,分為 9 個(gè)實(shí)驗(yàn),將逐一講解:
- 如何編譯和使用 Nginx;
- 如何使用相關(guān)的驗(yàn)證工具,編寫簡(jiǎn)單的 HTTP 模塊和 HTTP 過濾模塊,并在此基礎(chǔ)上介紹如何使用自定義變量;
- 如何使用 Nginx 的定時(shí)器;
- 如何使用工具檢查編寫的模塊中是否存在內(nèi)存問題。
即使你之前從未使用過 Nginx 也沒關(guān)系,課程會(huì)從 Nginx 的歷史和優(yōu)勢(shì)講起,幫助你建立起系統(tǒng)的認(rèn)識(shí)。
Nginx 的發(fā)展史
Nginx 最開始是由 Igor Sysoev 在 Rambler.ru 任職期間開發(fā)的,它誕生于 2002 年 8 月 6 日。
從 nginx-0.5.x 開始(時(shí)間為 2007 年左右),Nginx 開始受到國內(nèi)互聯(lián)網(wǎng)人士關(guān)注,如在國內(nèi)普及 Nginx 的先驅(qū) — 張宴。
2011 年 12 月 2 日,阿里巴巴旗下的淘寶網(wǎng)技術(shù)團(tuán)隊(duì)正式開源了基于 nginx-1.0.10 開發(fā)的一個(gè)重要變種 Tengine 。
2020 年 3 月,Nginx 在全球 Web 服務(wù)器市場(chǎng)的占有率首超老牌 Web 服務(wù)器 Apache,見下圖:
圖片引自 2020 年 3 月 Web 服務(wù)器市場(chǎng)占有率調(diào)查 。
Nginx 為什么會(huì)流行
在 Nginx 出現(xiàn)之前,已經(jīng)存在 Apache 這種功能與 Nginx 有很多重合的服務(wù)器,而且 Apache 經(jīng)過幾十年的發(fā)展,運(yùn)行高度穩(wěn)定,功能也非常完備,支持的平臺(tái)眾多,配套的軟件不計(jì)其數(shù)。但是也正因?yàn)?Apache 已經(jīng)存在幾十年了,歷史包袱重,其性能低和對(duì)系統(tǒng)資源的占用率高等問題越來越不滿足互聯(lián)網(wǎng)和移動(dòng)互聯(lián)網(wǎng)發(fā)展的需求。
Apache 在較老的系統(tǒng)上,只能用低效的 select 網(wǎng)絡(luò) I/O 多路復(fù)用接口(即提供一個(gè)或者幾個(gè)函數(shù)來添加,監(jiān)控和刪除多個(gè)連接的網(wǎng)絡(luò)事件,如可讀,關(guān)閉等),雖然在較新的系統(tǒng)上,它也支持如 epoll 等高效的網(wǎng)絡(luò) I/O 多路復(fù)用接口,但是其由于歷史原因,它的一個(gè)進(jìn)程同時(shí)只能全程處理一個(gè)請(qǐng)求,處理完后才能再處理另一個(gè)請(qǐng)求,這可能導(dǎo)致進(jìn)程頻繁切換,嚴(yán)重消耗系統(tǒng)資源,無法應(yīng)對(duì)現(xiàn)在動(dòng)則上萬,十幾萬甚至幾十萬的并發(fā)請(qǐng)求:
Nginx 從誕生起就使用了 epoll (Linux)和 kqueue (FreeBSD)等高效的網(wǎng)絡(luò) I/O 多路復(fù)用接口。不過,在某些平臺(tái)上它仍然能使用 select 等傳統(tǒng)的網(wǎng)絡(luò) I/O 多路復(fù)用接口,如 Windows 。不僅如此,Nginx 從設(shè)計(jì)之初就保證了一個(gè)進(jìn)程同時(shí)能處理很多個(gè)請(qǐng)求,所以它減少了進(jìn)程切換帶來的開銷:
另外,Nginx 也支持常見的操作系統(tǒng),如 Linux,FreeBSD,MacOS,Windows 等。再次,Nginx 對(duì)資源的占用很少,穩(wěn)定性也經(jīng)受住了眾多公司的檢驗(yàn)。最后,Nginx 為編寫第三方模塊提供了一套穩(wěn)定的接口,吸引了眾多個(gè)人,組織和公司為其開發(fā)各種功能的模塊,詳情可以參考 Nginx 第三方模塊列表(部分)。
總之,就是 Nginx 趕上了操作系統(tǒng)的變革時(shí)代(Linux 2.6+ 開始支持 epoll),又滿足了歷史的發(fā)展需求(互聯(lián)網(wǎng)和移動(dòng)互聯(lián)網(wǎng)的繁榮),導(dǎo)致它變得流行。
篇幅有限,更多課程內(nèi)容可以在實(shí)驗(yàn)樓邊敲代碼邊學(xué)習(xí)~
點(diǎn)擊《Nginx 網(wǎng)絡(luò)模塊編寫入門》,免費(fèi)學(xué)習(xí)課程前兩節(jié)。
總結(jié)
以上是生活随笔為你收集整理的从入门到实践,快速掌握 Nginx 研发的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这个大数据时代,算法的重要性你要意识到
- 下一篇: 做个高颜值的优秀按钮,用 CSS3 实现