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

網(wǎng)公網(wǎng)安備