web服務(wù)器 - Nginx可不可以理解為一個(gè)框架,上面跑的都是什么程序?
問題描述
web這塊東西真的太多了,框架N多種,還有什么web容器,web服務(wù)器,這么多名詞,對于新手來說簡直就是惡夢啊。。。花了一天時(shí)間,稍微清楚了點(diǎn),
1,其實(shí)這些所謂的框架無非就是一些封裝,把接口提供給我們使用。
2,web容器么應(yīng)該算是一個(gè)運(yùn)行環(huán)境或者編譯器?用來產(chǎn)生html文件的。
3,web服務(wù)器這個(gè)概念太廣了,感覺說不清楚。。。
4,言歸正傳,Nginx應(yīng)該屬于框架?還是說,它本身就是一個(gè)應(yīng)用程序?還有,在Nginx上面進(jìn)行開發(fā)是用C嗎?(注意,不是說Nginx本身是由什么語言開發(fā)的),而是Nginx上面跑的程序是由什么語言開發(fā)的?只能用C嗎?
5,Nginx開發(fā)到底是什么意思?如果它本身就是一個(gè)應(yīng)用程序,在應(yīng)用程序上面再開發(fā)一個(gè)應(yīng)用程序?
以上5點(diǎn)不知道有哪幾點(diǎn)是對的,可能全錯(cuò)。。。望各位大神解救一下我這個(gè)想學(xué)web的菜鳥
問題解答
回答1:我非常同意你的觀點(diǎn)
web容器,就是一個(gè)應(yīng)用程序,利用應(yīng)用層的http傳輸各種格式的數(shù)據(jù),例如html,瀏覽器會根據(jù)數(shù)據(jù)類型分別處理
web服務(wù)器概念不大,可以通俗理解為就是一個(gè)赤裸裸的http服務(wù),只不過這個(gè)http服務(wù)傳輸?shù)膚eb相關(guān)的數(shù)據(jù)
Nginx位于網(wǎng)絡(luò)的最頂層,屬于一個(gè)應(yīng)用。C開發(fā),它支持模塊的二次開發(fā)。
Nginx開發(fā)應(yīng)該指的是插件的開發(fā),nginx也是有http模塊的,但是這個(gè)http模塊是默認(rèn)通用的模塊,如果你需要定制自己的http的模塊你就需要用C二次開發(fā)。我們有個(gè)需求就是驗(yàn)證請求的合法性,我們的做法就是每個(gè)http請求的header里都會有個(gè)加密串,然后通過我們自己寫的nginx的http模塊進(jìn)行反解,如果不對就block掉,這樣無效請求就不會進(jìn)到我們的業(yè)務(wù)服務(wù)器里。還有一個(gè)情況也是最常見的就是用Lua寫nginx拓展,例如發(fā)布新版本做灰度發(fā)布的時(shí)候,我們想讓少部分用戶流量導(dǎo)入新服務(wù)器,測試沒問題的時(shí)候再導(dǎo)入所有流量,這個(gè)就可以用lua腳本來實(shí)現(xiàn),寫一個(gè)nginx組件實(shí)現(xiàn)你的個(gè)性化需求,當(dāng)然nginx框架本身提供一些底層的api,所以在寫插件的時(shí)候你只需要關(guān)注你的邏輯而不需要關(guān)注底層實(shí)現(xiàn).
nginx開發(fā)就像你給一個(gè)類寫一個(gè)類方法一樣
回答2:框架是把開發(fā)中常用的代碼和模式提取出來,不需要程序員自己再手動造了
web容器就是虛擬機(jī)
web服務(wù)器就是處理網(wǎng)絡(luò)請求返回各種文本的軟件進(jìn)程,比如最常見的就是碰到http請求就返回html文本
nginx是代理服務(wù)器,基于各種語言實(shí)現(xiàn)的web服務(wù)器進(jìn)程沒有nginx也能照樣處理網(wǎng)絡(luò)請求以及吐回相應(yīng)的文本,而nginx的作用簡單說就是把各種網(wǎng)絡(luò)請求篩選后扔給這些相應(yīng)的web服務(wù)器進(jìn)程,再把這些web服務(wù)器吐回的文本作為它處理網(wǎng)絡(luò)請求吐回去的文本,嗯nginx也是web服務(wù)器進(jìn)程
上面說了,只要是能處理網(wǎng)絡(luò)socket請求的進(jìn)程,nginx都可以溝通,所以nginx與什么語言開發(fā)沒關(guān)系,除非你要對nginx本身功能拓展,那么用c與lua
回答3:是一個(gè)類似Apache 的服務(wù)器,后端編程語言依賴服務(wù)器搭建運(yùn)行環(huán)境,可以理解為一個(gè)服務(wù),而不是程序
