1. 程式人生 > >進入NGINX的世界:從只會瀏覽網頁,邁向會搭建網站

進入NGINX的世界:從只會瀏覽網頁,邁向會搭建網站

Hello 大家好哦

先簡單介紹一下我自己吧 , 大米是來自北京的運維架構師一名, 從2004年參加工作至今已經第14年了

歲數確實很大啦 但是 咱們當運維的人永遠都保持著年輕的心是最重要的了

有的朋友可能要問大米了, 做運維可以幹上這麼多個年頭嗎 , 前景如何啊 待遇怎麼樣?

[大米心中偷著樂]

這還用問嗎?如果前途和待遇不行話 怎麼可能一直做這麼多年呢 ^_^?

接下來 又有人給大米提出問題了, 請問 運維這一行當 和 開發比起來如何呢?

[閉上眼回顧一下]

其實這個問題仁者見仁智者見智 , 大米不會去爭辯,只能說我本人對Linux運維有著比較重的情節,因為薪資不比開發低,且年齡基本不受限制 , 更重要的是,大米比較喜歡涉獵廣泛的技術面(這一點在運維中體現的尤其明顯)

言歸正傳 接下來 談一談我們的這個專題的宗旨

為什麼大米希望能給大家帶來一篇NGINX的教程呢? 接下來咱們就如下的幾個原因分別的跟大家聊一聊

[通過NGINX瞭解網站工作流程]

意思就是說,我們並不僅僅只是學習NGINX本身的技術,而是通過NGINX的學習,讓你對整體網站的運作模式 乃至企業叢集架構 也有一定程度的瞭解

提到"網站"這個詞, 大米就不得不回憶一下曾經的經歷了

還記得大米在2004年剛剛參加工作的時候,做的就是嵌入式的WEB C語言 CGI開發(說的直白點 就是在嵌入式主機板上 建立一個網站),第一天剛剛報道的時候,主管立刻就把我叫到跟前,跟我說:你目前的任務 就是先搞明白WEB動態網站是怎麼回事,然後再搞清楚如何在嵌入式上實現WEB站點. 當時記得真是一臉懵逼啊 ,都不知道說的是啥 ("什麼 網站可以用C語言來開發?")後來被主管老張一步一步的指點 才終於明白了 網站是怎麼回事,域名DNS是怎麼回事 , 動態網站和靜態網站又是怎麼回事,動靜分離是怎麼回事,表單提交和CGI又是怎麼回事 .. , 就這樣一點一點就入門開始寫網站程式碼了

回想起剛剛參加工作時候的情景,真是歷歷在目。 而最重要的是,經過了十幾年後,當初最開始學到的各種關於網站的技術和思路,直到今天 依然在日常工作中發揮著作用,為什麼呢?我們在下面一個小節解釋

[如今網際網路 幾乎處處離不開WEB伺服器 (NGINX) ]

上個單元 咱們提到了嵌入式上的網站, 關於嵌入式是什麼 我們不需要去搞懂它,我們在這裡只需要知道 在那個年代 在一個嵌入式小主機板上(就是個微型電腦)想要做出一個網站 那真的是難度太大了。

因為在當時的情況下(老式嵌入式環境的限制) 沒有辦法使用像NGINX 和 PHP(PHP我們以後再講) 這樣方便的軟體 來建設網站
所以 可想而知 一個動態網站 需要用C語言去編寫(靜態和動態兩部分)難度可想而知

現如今搭建一個讓別人能訪問的網站, 最重要的基礎前提是什麼? 那就是 首先必須得有一個WEB伺服器 才可以

那什麼是WEB伺服器呢?

我們現在 學著脫離一個普通傻瓜使用者 而以一個技術人員的思路 來思考一下 平時當我們隨時隨地開啟一個網頁瀏覽的時候 它的背後是怎麼實現的吧(其實這也是 作為一個合格的運維技術人員 必須要掌握的學習方法 和思考問題的方式)

首先第一個最容易想到的是, 之所以 一個遠端的網頁能被你開啟瀏覽, 那至少得先經過網路的傳輸才可以 對不?

那接下來呢?經過網路傳輸 那傳輸的是什麼東西?

想象一下 平時咱們每天上下班捧著個手機 , 或者坐在家裡電腦前 看著網頁上的東東 都有些什麼呢?

大量的文字? 各式各樣的圖片 和 視訊 各種按鈕 輸入框 各種導航條

平時我們在瀏覽器網頁的時候(無論是手機 還是電腦)在網路中傳輸來傳輸去的 其實歸納起來 無非就是上面說的這些

這些在網站技術領域中 被賦予了一個專門的詞彙 叫做 靜態資源(所謂靜態資源 人們瀏覽器網頁 最直觀看到 感受到的)

雖然這些都被稱作靜態資源 但是他們的型別並不一樣, 而在網路中傳輸的時候 又必須得藉助一種統一的規範作為載體
(就好比是 很多種不同的貨物 想要運送度過一條河到對岸 必須都要統一放入一搜貨船中)

這個載體的名字 大家一定很熟悉 那就是HTTP協議 沒錯 之所以你能看得到網頁中各種內容 都是它從中給你充當翻譯

所謂的伺服器 伺服器, 那必須得能給從遠處訪問過來的使用者 提供服務才可以 不是麼?

這個服務 在咱們當下說的網站領域中,指的就是HTTP協議的處理, 一個能處理HTTP協議的軟體 我們就稱作 一個WEB伺服器
這就是我們即將要學習的NGINX

然而實事求是的說,技術領域中的 WEB伺服器 其實並不止NGINX一個 , 其他的還有很多哦 例如 APACHE ,Tomcat , Lighthttpd 等等

但是你要知道的是, 技術浩瀚如海 我們的精力和時間有限, 學同一型別技術的時候 我們就挑選 最火的最有前途的 技術學

[談談伺服器是什麼概念]

通過之前的章節 我們知道了 NGINX其實就是一個有能力 解析和翻譯HTTP協議的軟體,讓我們可以通過瀏覽器(WEB)網上衝浪 正是由於它能對外(指的是咱們上網使用者) 提供這種"服務", 所以 我們又稱作它為 WEB伺服器

在這一個章節中 我們需要給大家再把一個概念搞清楚 那就是 "伺服器"

說到"伺服器" 其實它包含了兩層的含義 一個是指 像NGINX這樣 對外提供服務的 持續運作的軟體
(這種對外提供服務的軟體 和我們平時自己用的軟體有很大的不同, 通常自己用的軟體 比如一個遊戲軟體 一個防毒軟體 一個計算器 這種都是個人軟體,顧名思義就是給個人 給自己提供服務 自己拿著用 , 而像NGINX這種服務類的軟體, 它可不是隻給一個人自己使用的哦, 而是為了給成千上萬的人提供某些功能 所以 這一點我們要搞清楚)

第二個含義 指的就是 硬體的伺服器

NGINX的功能很強大 很穩定 持續不斷的給訪問網站的使用者服務 提供和解析資源, 但是NGINX畢竟是個軟體啊 它總不可能自己憑空著執行吧。

所以它必須依賴一個 穩定的執行的實體載體, 這就是硬體伺服器。 硬體伺服器 可以理解為 就是功能更強大的計算機, 本質並沒有什麼不同,只不過 它和一般家用PC電腦或者筆記本 比較起來,是專門為了長久穩定高速執行 而制定的
(伺服器和PC電腦的關係, 就跟上面咱們提過的 個人軟體和服務類軟體 的關係很貼近, 就是服務個人 和服務一群人的區別)

另外 光有NGINX 和 伺服器 還不足以開始假設我們的網站,其中還缺少一個非常重要的環節,那麼就是作業系統啊!

NGINX這種服務類軟體 + 實體伺服器 + 穩定的作業系統(LINUX,運維工程師必備的技能,下個篇幅我們再學習) 這三樣就組成了我們搭建一個網站(最簡單的靜態網站 , 什麼是動態網站 我後面再講)的最基本的條件了

[為什麼NGINX這麼重要? 因為網站的概念 其實是可以無限延伸擴充套件的 ]

在這個章節中,我們討論一個非常重要的概念,那就是網站概念的延伸 這裡不是很好理解 一定要自習的閱讀!

咱們之前說了好多的篇幅, 感覺一直都是在談論網站 網站 網站. 難道就只有在 搭建一個"網站"的時候 NGINX才派上用場嘛?

首先 大米給大家提出一個問題,請大家好好想想, 我們平時 所謂的上網 連網 就僅僅是瀏覽網頁 沒別的了?

請問你 手機沒有用過導航 ? 有沒有叫過外賣,有沒有玩過手遊? 有沒有用過各種社交類軟體撩妹過?

我很負責任的告訴你 當你使用這些功能的軟體的時候, NGINX一樣無處不在 都在默默的為你提供者服務

那說到這裡 大家可能會有一個疑問了

咦? 平時使用手機導航,或者玩手遊的時候, 我可沒有開啟什麼瀏覽器哦 ,這跟“網站”應該絲毫無關吧, 為什麼也都會使用NGINX?

如果要解釋這個問題,我們就回到上上個章節中一起來回顧一下, NGINX的定義是什麼

NGINX是一個專門搭建"網站"的伺服器? NO NO NO!~~ 大米可不是這麼說的哦

大米告訴大家的是, NGINX是一個高效能處理"HTTP協議" 的服務軟體

這裡的關鍵就在"HTTP協議上", 這裡其實是一個包含不化等號的關係 希望大家可以理解好

網站 必須依賴HTTP協議 才能瀏覽
但是依賴HTTP協議瀏覽的 可不見得是網站哦

其實現在 網際網路在我們的日常生活中 凡是用於給使用者展示的 或者說 最貼近咱們使用者的部分 使用的大多數都是HTTP協議
(技術架構中,我們稱作 WEB前端 幾乎清一色使用HTTP協議 作為入口,而相應的還有後端技術(就不再是HTTP協議了),這些目前不懂沒關係 我們以後的章節還會再講解)

既然到處都是HTTP協議, 而且網際網路的流量又是那麼巨大,所以像NGINX這種 以高效能穩定執行解析HTTP協議的軟體 一統天下 就是大勢所趨了
(就目前來說 APACHE作為 WEB伺服器的老大哥 依然佔據著最多的市場份額, 但是 由於NGINX的上升速度實在太快,取而代之成為第一 也就是幾年的事)

[知識成主幹 你學到的不僅僅是NGINX ]

凡是看過大米講運維相關課程的同學都清楚, 我從來講究的都是 獨木不成林 知識之間必須形成鏈路 最終成主幹這樣的思路

上線一個專欄《生產框架下的Nginx》的目的 不光是讓你掌握一個NGINX相關知識, 而是通過這一門課程 可以讓你進入到運維架構思路之中 學會如何讓知識形成體系

這種知識成體系的能力 才是我們最終所追求 就好比 你學英語天天就被單詞 而不去大量讀文章 瞭解國外文化 和通俗說法 就算你背下來10萬個單詞 也沒有用處

接下來 就跟隨大米老師 一起通過NGINX 進入知識的海洋吧 ^_^