搜尋

Nginx(發音為「engine x)是一款由俄羅斯軟體工程師Igor Sysoev寫的開源的web伺服器。 自從2004年發布以來nginx一直關注於高性能、高並發、低內存的使用,另外還有一些特色的Web 、存取和頻寬控制以及能夠有效的與各種應用整合這些特點使得nginx成為現代網站架構中一個不錯的選擇。目前,nginx在網路最受歡迎web伺服器軟體排行榜上排名第二。

1. 為什麼高併發如此重要?

目前網路是如此普及且無所不在,而我們知道,這在10年前是很難想像的。而且,由於從基於NCAS(譯者註:國家超級電腦應用中心)的簡單的HTML產生可點擊文本到基於 web服務的重大演變,使得網路成為全球2億網民的常用溝通媒介。隨著電腦、行動裝置和最近的平板電腦的永久擴散連接,導致互諒網領域變化非常迅速以及整個經濟的有線數位化。線上服務也隨著生活和娛樂資訊的即時有效而變得更加細緻。而且線上業務的安全方面也發生了重大變化。因此網站也變得比以前更加複雜,也就需要更多工程方面的工作使互聯網更加健壯以及具有更好的擴展性。

對一個網站架構來說最大的挑戰就是並發問題。從

網路服務一開始,並發等級就在持續不斷的成長。而一個網站同時為數百上千甚至數百萬用戶同時服務的情況也並不少見。十年以前,導致並發的原因是客戶端慢-當時用戶使用ADSL或者撥號上網來連接;如今,發一些連結來更新新聞、推特、朋友訊息等的更新應用程式體系結構的組合。另外另一個造成並發增加的因素是現代瀏覽器同時為一個網站開啟46個連線來載入網頁以提高頁面載入速度。 為了說明客戶端慢時存在的問題,假設有一個簡單的基於

apacheweb服務可以產生一個文只用花幾分之一秒就能產生或查詢出這個頁面,但是在一個有80kbps(10kB/s)頻寬的客戶端中卻需要10秒鐘來發送這個請求;原本這個web服務可以很快拉到100k的內容,但是卻要在花費10秒鐘傳送完這10後才能釋放這100k100k100k10k33333573333333333333(100k的內容。現在我們假設有1000個同時連接上的客戶端來請求相似的內容,如果一個客戶端被分配到1M的額外內存,那麼為了滿足這1000的額外內存,那麼為了滿足這1000 100K的請求則需要1000M(大約1G)的額外記憶體。實際上,一個基於apache的標準web服務通常要為每個連接分配大於1M的內存,而且可悲的是移動通信的有效速率卻僅為幾十 kpbs。雖然可能透過作業系統核心的socket緩衝在一定程度上可以緩解向比較慢的客戶端發送內容的問題,但是總歸不是通用的解決辦法而且可能有不可預期的負面效果。

在對於持久連接的處理上使得並發問題變得更加突出,這是因為要避免重新創建http連接帶來的延遲,客戶端要一直保持與而且web服務還要為每個連線分配額外的記憶體空間。

因此,為了能夠並且能夠持續性處理隨著日益增加的用戶量而導致的不斷增加的負載以及獲得更高的並發性,一個網站必須基於一系列非常高性能的模組來構建。但是,其他部分如硬體(CPU,記憶體,硬碟)、網路容量、應用程式和資料儲存架構顯然也是同樣重要的,它決定了、網路容量、應用程式和資料儲存架構顯然也是同樣重要的,它決定了web可接受和處理的客戶端連線數。所以web伺服器需要能夠透過非線性擴展來滿足每秒鐘不斷增長的並發連接和請求數。

Apache是否合適?

Apache,起源於二十世紀九十年代初,目前仍是互聯網上占主導地位的web伺服器軟體。從2000年開始,很明顯的單機web服務很難透過簡單的複製來滿足不斷增長的網路服務。儘管apache為未來開發提供了一個堅實的基礎,但它為每個新連結來做一次自我複製的架構並不能滿足一個網站非線性擴展的要求。最終,apache成了一個功能齊全、有一系列第三方插件而且幾乎普遍普遍適用於任何類型二次開發的網站的web伺服器。但是這樣重並沒有任何好處,而且這樣做的缺點是將如此多的功能和工具組合到一個軟體中也會增加每個連接的 cpu和記憶體佔用率從而降低軟體的可擴展性。

因此,既然伺服器硬體、作業系統、網路資源不再是限制網站成長的主要因素,世界各地的開發者們也開始尋求更有效的方法來運行web服務器。 大概在十年前,一位著名軟體工程師Daniel Kegel聲稱「現在對於web伺服器來說是時候只是上萬並發請求了」而且還預測了我們現在稱之為互聯網雲服務的東西。 Kegel的C10K清單裡也進行了一些對web伺服器最佳狀態下並發連線數問題的嘗試解決,最終證明nginx是最有效的解決途徑。

為了解決C10K清單上同時10000連接數的問題,nginx考慮採用的不同架構方式-一個在並發連接數和每秒請求數都更適合非線性擴展的架構。由於 nginx是基於事件模型,所以它並不遵循apache複製每個新的進程或為每個頁面建立單獨執行緒的規則。結果,即使負載的增加,內存和CPU使用率仍然可控,這也使得nginx在一台伺服器上透過普通硬體就可以處理數萬並發請求。

nginx 第一版本的發布是為了對基於apache的應用伺服器中部署在apache下的靜態內容,例如html,css,javascript腳本以及圖片可以透過nginx來卸載並發和超時處理。在其發展過程中,nginx透過使用FastCGI、uswgi 或SCGI協定實現了與第三方應用的集成,而且具有像memcache這樣的分散式物件快取系統。同時也增加了一些有用的功能,例如含有負載平衡機制的反向代理以及快取等。這些額外的特色功能使nginx成為建立一個基於可伸縮web基礎設施的有效工具的組合。

使用nginx時候還有更多優點?

通常高效、高效的處理大並發請求是nginx最主要的優勢,同時,使用nginx還有一些其他好處。

在過去的幾年裡,網路架構師們已經接受了松耦合的思想並開始從web服務中將應用的基礎組件分離出來。然而,先前已經存在的基於LAMP(Linux,Apache,MYSQL,PHP,Python或Perl)的網站,現在可能包括不僅僅基於LEMP(E發音為“engine x”)的網站卻在實際中越來越經常的需要將web伺服器推到基礎設施的邊緣地帶或需要透過不同的方式將相同的或一些新的應用以及資料工具整合起來。

對於以上情況來說nginx非常適合,這是因為nginx從應用層到更有效率的邊緣伺服器(譯者註:不熟悉的讀者可查詢邊緣伺服器)層提供了一些主要功能例如卸載並發、逾時處理、SSL(安全通訊端層)、內容靜態化、壓縮和快取、連線數和請求的節流甚至是HTTP串流媒體。同時nginx還可以直接和 memcached、Redis以及其他的NoSQL解決方案來提高大並髮用戶下的效能。

隨著最新的開放工具組件和程式語言的流行,越來越多的公司開始改變他們開發和部署應用的習慣。而nginx也已成為這類改變的典範,發展為最重要的組件之一,同時它也已經幫助許多公司在預算範圍內來實現web服務持續快速的發展。

nginx的第一行程式碼寫於2002年,到2004年nginx透過2-two-clause BSD授權協議發布。自從nginx發布以來,它的用戶群一直持續增長,並且貢獻各種想法以及提交bug、提出各種意見和建議為整個社區提供了非常大的幫助。

nginx 的程式碼庫是原創的,而且完全透過C語言來實現。它也已經被移植到多種架構下的作業系統中,例如Linux, FreeBSD, Solaris, Mac OS X, AIX 和Windows系統。 nginx也有自己的函式庫,而且這些函式庫並沒有使用系統中不存在的C函式庫,因此,除了zlib、PCRE和OpenSSL這幾個函式庫之外,使用者可以去掉自己不需要或可能有許可衝突的函式庫。

這裡稍微說一下windows版本的nginx。運行在windows下的nginx更像是一個概念驗證而不是一個功能齊全的連接埠。在windows下 nginx也是有限制的,那就是nginx不能很好的和windows核心相容,已經知道的低版本的nginx在windows的問題有支援並發數少、效能低、快取失效以及頻寬策略失效。今後,windows版本nginx將更符合主流功能。

 

以上就介紹了nginx 簡介篇,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
Web Speech API开发者指南:它是什么以及如何工作Web Speech API开发者指南:它是什么以及如何工作Apr 11, 2023 pm 07:22 PM

​译者 | 李睿审校 | 孙淑娟Web Speech API是一种Web技术,允许用户将语音数据合并到应用程序中。它可以通过浏览器将语音转换为文本,反之亦然。Web Speech API于2012年由W3C社区引入。而在十年之后,这个API仍在开发中,这是因为浏览器兼容性有限。该API既支持短时输入片段,例如一个口头命令,也支持长时连续的输入。广泛的听写能力使它非常适合与Applause应用程序集成,而简短的输入很适合语言翻译。语音识别对可访问性产生了巨大的影响。残疾用户可以使用语音更轻松地浏览

如何使用Docker部署Java Web应用程序如何使用Docker部署Java Web应用程序Apr 25, 2023 pm 08:28 PM

docker部署javaweb系统1.在root目录下创建一个路径test/appmkdirtest&&cdtest&&mkdirapp&&cdapp2.将apache-tomcat-7.0.29.tar.gz及jdk-7u25-linux-x64.tar.gz拷贝到app目录下3.解压两个tar.gz文件tar-zxvfapache-tomcat-7.0.29.tar.gztar-zxvfjdk-7u25-linux-x64.tar.gz4.对解

web端是什么意思web端是什么意思Apr 17, 2019 pm 04:01 PM

web端指的是电脑端的网页版。在网页设计中我们称web为网页,它表现为三种形式,分别是超文本(hypertext)、超媒体(hypermedia)和超文本传输协议(HTTP)。

web前端和后端开发有什么区别web前端和后端开发有什么区别Jan 29, 2023 am 10:27 AM

区别:1、前端指的是用户可见的界面,后端是指用户看不见的东西,考虑的是底层业务逻辑的实现,平台的稳定性与性能等。2、前端开发用到的技术包括html5、css3、js、jquery、Bootstrap、Node.js、Vue等;而后端开发用到的是java、php、Http协议等服务器技术。3、从应用范围来看,前端开发不仅被常人所知,且应用场景也要比后端广泛的太多太多。

深入探讨“高并发大流量”访问的解决思路和方案深入探讨“高并发大流量”访问的解决思路和方案May 11, 2022 pm 02:18 PM

怎么解决高并发大流量问题?下面本篇文章就来给大家分享下高并发大流量web解决思路及方案,希望对大家有所帮助!

web前端打包工具有哪些web前端打包工具有哪些Aug 23, 2022 pm 05:31 PM

web前端打包工具有:1、Webpack,是一个模块化管理工具和打包工具可以将不同模块的文件打包整合在一起,并且保证它们之间的引用正确,执行有序;2、Grunt,一个前端打包构建工具;3、Gulp,用代码方式来写打包脚本;4、Rollup,ES6模块化打包工具;5、Parcel,一款速度极快、零配置的web应用程序打包器;6、equireJS,是一个JS文件和模块加载器。

Python轻量级Web框架:Bottle库!Python轻量级Web框架:Bottle库!Apr 13, 2023 pm 02:10 PM

和它本身的轻便一样,Bottle库的使用也十分简单。相信在看到本文前,读者对python也已经有了简单的了解。那么究竟何种神秘的操作,才能用百行代码完成一个服务器的功能?让我们拭目以待。1. Bottle库安装1)使用pip安装2)下载Bottle文件https://github.com/bottlepy/bottle/blob/master/bottle.py2.“HelloWorld!”所谓万事功成先HelloWorld,从这个简单的示例中,了解Bottle的基本机制。先上代码:首先我们从b

ASGI解释:Python Web开发的未来ASGI解释:Python Web开发的未来Apr 12, 2023 pm 10:37 PM

​译者 | 李睿审校 | 孙淑娟Python Web应用程序长期以来一直遵循Web服务器网关接口(WSGI)标准,该标准描述了它们如何与Web服务器通信。WSGI最初于2003年推出,并于2010年更新,仅依赖于Python2.2版本中原生可用的、易于实现的功能。因此, WSGI迅速融入了所有主要的Python Web框架,并成为Python Web开发的基石。快进到2022年。Python2已经过时,Python现在具有处理网络调用等异步操作的原生语法。WSGI和其他默认假定同步行为的标准无法

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具