首頁 後端開發 php教程 nginx 簡介篇

nginx 簡介篇

Aug 08, 2016 am 09:21 AM
apache nginx web

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
nginx在windows中怎麼配置 nginx在windows中怎麼配置 Apr 14, 2025 pm 12:57 PM

如何在 Windows 中配置 Nginx?安裝 Nginx 並創建虛擬主機配置。修改主配置文件並包含虛擬主機配置。啟動或重新加載 Nginx。測試配置並查看網站。選擇性啟用 SSL 並配置 SSL 證書。選擇性設置防火牆允許 80 和 443 端口流量。

docker怎麼啟動容器 docker怎麼啟動容器 Apr 15, 2025 pm 12:27 PM

Docker 容器啟動步驟:拉取容器鏡像:運行 "docker pull [鏡像名稱]"。創建容器:使用 "docker create [選項] [鏡像名稱] [命令和參數]"。啟動容器:執行 "docker start [容器名稱或 ID]"。檢查容器狀態:通過 "docker ps" 驗證容器是否正在運行。

docker容器名稱怎麼查 docker容器名稱怎麼查 Apr 15, 2025 pm 12:21 PM

可以通過以下步驟查詢 Docker 容器名稱:列出所有容器(docker ps)。篩選容器列表(使用 grep 命令)。獲取容器名稱(位於 "NAMES" 列中)。

怎麼查看nginx是否啟動 怎麼查看nginx是否啟動 Apr 14, 2025 pm 01:03 PM

確認 Nginx 是否啟動的方法:1. 使用命令行:systemctl status nginx(Linux/Unix)、netstat -ano | findstr 80(Windows);2. 檢查端口 80 是否開放;3. 查看系統日誌中 Nginx 啟動消息;4. 使用第三方工具,如 Nagios、Zabbix、Icinga。

docker怎麼創建容器 docker怎麼創建容器 Apr 15, 2025 pm 12:18 PM

在 Docker 中創建容器: 1. 拉取鏡像: docker pull [鏡像名] 2. 創建容器: docker run [選項] [鏡像名] [命令] 3. 啟動容器: docker start [容器名]

Zookeeper集群在CentOS如何搭建 Zookeeper集群在CentOS如何搭建 Apr 14, 2025 pm 02:09 PM

在CentOS系統上部署ZooKeeper集群,需要以下步驟:環境準備安裝Java運行環境:使用以下命令安裝Java8開發工具包:sudoyuminstalljava-1.8.0-openjdk-devel下載ZooKeeper:從ApacheZooKeeper官方網站下載適用於CentOS的版本(例如ZooKeeper3.8.x)。使用wget命令下載,並替換zookeeper-3.8.x為實際版本號:wgethttps://downloads.apache.or

如何解決CentOS系統故障 如何解決CentOS系統故障 Apr 14, 2025 pm 01:57 PM

解決CentOS系統故障的方法有很多,以下是一些常見的步驟和技巧:1.檢查日誌文件/var/log/messages:系統日誌,包含各種系統事件。 /var/log/secure:安全相關日誌,如SSH登錄嘗試。 /var/log/httpd/error_log:如果使用Apache服務器,這裡會有錯誤信息。 2.使用診斷工具dmesg:顯示內核環緩衝區的內容,有助於了解硬件和驅動問

nginx怎麼啟動 nginx怎麼啟動 Apr 14, 2025 pm 01:06 PM

問題:如何啟動 Nginx?答案:安裝 Nginx啟動 Nginx驗證 Nginx 是否已啟動探索其他啟動選項自動啟動 Nginx

See all articles