1. 程式人生 > >Nginx初探

Nginx初探

一、 概念

Nginx——Ngine X,是一款自由的、開源的、高效能HTTP伺服器和反向代理伺服器;也是一個IMAP、POP3、SMTP代理伺服器;也就是說Nginx本身就可以託管網站(類似於Tomcat一樣),進行Http服務處理,也可以作為反向代理伺服器使用。

Nginx 解決了伺服器的C10K(就是在一秒之內連線客戶端的數目為10k即1萬)問題。它的設計不像傳統的伺服器那樣使用執行緒處理請求,而是一個更加高階的機制—事件驅動機制,是一種非同步事件驅動結構。

雖然目前Nginx的份額在市場上只佔很少部分,但是其高效能和低消耗記憶體的結構,使得其越來越普遍,典型的一個應用就是我們可以使用Nginx作為反向代理進行網站的負載均衡器。例如:Wordpress、GitHub等知名的網站都使用到了Nginx。

二、 正向代理和反向代理

首先,代理伺服器一般指區域網內部的機器通過代理伺服器傳送請求到網際網路上的伺服器,代理伺服器一般作用在客戶端。例如:GoAgent翻牆軟體。我們的客戶端在進行翻牆操作的時候,我們使用的正是正向代理,通過正向代理的方式,在我們的客戶端執行一個軟體,將我們的HTTP請求轉發到其他不同的伺服器端,實現請求的分發。

這裡寫圖片描述

反向代理伺服器作用在伺服器端,它在伺服器端接收客戶端的請求,然後將請求分發給具體的伺服器進行處理,然後再將伺服器的相應結果反饋給客戶端。Nginx就是一個反向代理伺服器軟體。

這裡寫圖片描述

從上圖可以看出:客戶端必須設定正向代理伺服器,當然前提是要知道正向代理伺服器的IP地址,還有代理程式的埠。
反向代理正好與正向代理相反,對於客戶端而言代理伺服器就像是原始伺服器,並且客戶端不需要進行任何特別的設定。客戶端向反向代理的名稱空間(name-space)中的內容傳送普通請求,接著反向代理將判斷向何處(原始伺服器)轉交請求,並將獲得的內容返回給客戶端。

這裡寫圖片描述

三、伺服器的型別:

1、Web伺服器:提供Http的訪問,例如Nginx、Apache、IIS等,雖然Tomcat也能夠實現,但這並不是他的主要功能,而且效能也遠不如專門的Web伺服器;
2、應用程式伺服器:能夠用於應用程式的執行;
3、代理伺服器:代理伺服器通常是客戶端訪問的一種行為,在整個客戶端訪問伺服器的過程中有著重要的作用;
4、反向代理
5、後臺伺服器
6、CDN快取伺服器:它是快取伺服器的角色,而且是反向代理的應用,在網站部署的時候,他算是一種策略,對於遠距離訪問的解決方案。

四、 Nginx的特點

  Ø 跨平臺:可以在大多數Unix like 系統編譯執行。而且也有Windows的移植版本。
  Ø 配置異常簡單:非常的簡單,易上手。
  Ø 非阻塞、高併發連線:資料複製時,磁碟I/O的第一階段是非阻塞的。官方測試能支援5萬併發連線,實際生產中能跑2~3萬併發連線數(得益於Nginx採用了最新的epoll事件處理模型(訊息佇列)。
  Ø Nginx代理和後端Web伺服器間無需長連線;
  Ø Nginx接收使用者請求是非同步的,即先將使用者請求全部接收下來,再一次性發送到後端Web伺服器,極大減輕後端Web伺服器的壓力。
  Ø 傳送響應報文時,是邊接收來自後端Web伺服器的資料,邊傳送給客戶端。
  Ø 網路依賴性低,理論上只要能夠ping通就可以實施負載均衡,而且可以有效區分內網、外網流量。
  Ø 支援內建伺服器檢測。Nginx能夠根據應用伺服器處理頁面返回的狀態碼、超時資訊等檢測伺服器是否出現故障,並及時返回錯誤的請求重新提交到其它節點上。
  Ø 採用Master/worker多程序工作模式
  Ø 此外還有記憶體消耗小、成本低廉(比F5硬體負載均衡器廉價太多)、節省頻寬、穩定性高等特點。

五、Nginx的基本功能

Nginx的功能包括基本HTTP功能和擴充套件功能。和Apache伺服器一樣,Nginx伺服器為了提供更多的功能並且能夠有效地擴充套件這些功能。每一個模組都提供了一個功能,通過編譯這些功能模組來實現功能的擴充套件。

1、基本HTTP功能

a)提供靜態檔案和index檔案,處理靜態檔案,索引檔案以及自動索引,開啟檔案描述符快取;
b)使用快取加速反向代理,反向代理加速(無快取),簡單的負載均衡和容錯;
c)使用快取機制加速遠端FastCGI,簡單的負載均衡和容錯;
d)模組化的結構。過濾器包括gzipping,byte ranges,chunked responses,以及 SSI-filter。在SSI過濾器中,到同一個 proxy 或者 FastCGI 的多個子請求併發處理;
e)支援SSL 和 TLS SNI 支援;
f)IMAP/POP3代理服務功能;
g)使用外部 HTTP 認證伺服器重定向使用者到 IMAP/POP3 後端;
h)使用外部 HTTP 認證伺服器認證使用者後連線重定向到內部的 SMTP 後端;

2、其他HTTP功能

a)基於名稱和基於IP的虛擬伺服器;
b)支援Keep-alive和管道連線;
c)靈活的配置和重新配置、線上升級的時候不用中斷客戶訪問的處理;
d)訪問日誌的格式,快取日誌寫入和快速日誌輪循;
e)3xx-5xx錯誤程式碼重定向;
f)速度限制

六、Nginx的基本模組

Nginx的核心模組包括核心模組和事件驅動模組,即:CoreModule和EventsModule;另外還有第三方模組 HTTP核心模組,HttpCoreModule,它是Nginx伺服器的核心模組。

CoreModule和EventsModule模組的配置相對於HttpCoreModule會少一些,但是它們的配置將會影響系統的效能,而非功能上的差異。

1、CoreModule用於控制Nginx伺服器的基本功能;
2、EventsModule用於控制Nginx如何處理連線。該模組的指令的一些引數會對應用系統的效能產生重要的影響;
3、HttpCoreModule提供HTTP訪問Nginx伺服器,該模組是不能缺少的。

七、 內部程序模型

這裡寫圖片描述

Nginx是以多程序的方式來工作的,當然Nginx也是支援多執行緒的方式的,只是我們主流的方式還是多程序的方式,也是Nginx的預設方式。Nginx採用多程序的方式有諸多好處。

Nginx在啟動後,會有一個master程序和多個worker程序。master程序主要用來管理worker程序,包含:接收來自外界的訊號,向各worker程序傳送訊號,監控 worker程序的執行狀態,當worker程序退出後(異常情況下),會自動重新啟動新的worker程序。而基本的網路事件,則是放在worker程序中來處理了。多個worker程序之間是對等的,他們同等競爭來自客戶端的請求,各程序互相之間是獨立的。一個請求,只可能在一個worker程序中處理,一個worker程序,不可能處理其它程序的請求。worker程序的個數是可以設定的,一般我們會設定與機器CPU核數一致,這裡面的原因與Nginx的程序模型以及事件處理模型是分不開的。

八、 處理請求

  首先,Nginx在啟動時,會解析配置檔案,得到需要監聽的埠與IP地址,然後在Nginx的master程序裡面,先初始化好這個監控的socket(建立socket,設定addrreuse等選項,繫結到指定的IP地址埠,再listen),然後再fork(一個現有程序可以呼叫fork函式建立一個新程序。由fork建立的新程序被稱為子程序 )出多個子程序出來,然後子程序會競爭accept新的連線。
  此時,客戶端就可以向Nginx發起連線了。當客戶端與Nginx進行三次握手,與Nginx建立好一個連線後,某一個子程序會accept成功,得到這個建立好的連線的socket,然後建立Nginx對連線的封裝,即ngx_connection_t結構體。
  接著,設定讀寫事件處理函式並新增讀寫事件來與客戶端進行資料的交換。最後,Nginx或客戶端來主動關掉連線,到此,一個連線就壽終正寢了。

九、 實際應用

由於Nginx是由俄羅斯人寫的,所以,Nginx 已經在俄羅斯最大的入口網站── Rambler Media(www.rambler.ru)上運行了3年時間,同時俄羅斯超過20%的虛擬主機平臺採用Nginx作為反向代理伺服器。

在國內,已經有淘寶、新浪部落格、新浪播客、網易新聞、六間房、56.com、Discuz!、水木社群、豆瓣、YUPOO、海內、迅雷線上等多家網站使用 Nginx 作為Web伺服器或反向代理伺服器。

這裡寫圖片描述

在近期一些專案的開發過程中,主要是使用Nginx和Tomcat來搭建高效能負載均衡叢集,即使用Nginx的反向代理功能來實現請求的分發,關於Nginx和Tomcat的組合使用,不在這裡重複造輪子,請參考免費文件:
http://download.csdn.net/detail/u010870518/9261395

相關推薦

nginx初探-安裝部署

之前沒有接觸過nginx,最近想用nginx做個簡單的圖片訪問服務,先學會安裝部署。 安裝nginx所需的程式 yum install gcc-c++ yum -y inst

Nginx初探

一、 概念 Nginx——Ngine X,是一款自由的、開源的、高效能HTTP伺服器和反向代理伺服器;也是一個IMAP、POP3、SMTP代理伺服器;也就是說Nginx本身就可以託管網站(類似於Tomcat一樣),進行Http服務處理,也可以作為反向代理伺服器

nginx 初探

 nginx優點: 1. 更快;nginx比其他Web伺服器更快的處理請求; 2. 高擴充套件性;nginx設計極具擴充套件性,由多個不同功能,不同層次,不同型別且耦合性極低的模組組成。可以針對單個模組升級,擁有龐大的第三方外掛; 3. 高可靠性;每個worker程序相

Nginx初探之負載均衡

 負載均衡是Nginx一個非常重要且常用的功能,常用的負載均衡方式有Round Robin和IP Hash。        下面將介紹用Nginx作負載均衡,後端服務列表採用Apache伺服器列表,負載均衡方式採用Round Robin:        http {    

初探nginx——安裝

x86_64 mime file 文件 sta kconfig 服務 ref art 一、   yum -y install nginx # 以最簡單的方式安裝,熟悉應用為主 二、   1.安裝完畢,查看下軟件版本:     $ rpm -q nginx     n

nginx、swoole高並發原理初探

sta socket r+ 同步異步 actor模型 標識 切換 變化 task 原文:https://segmentfault.com/a/1190000007614502 一、閱前熱身 為了更加形象的說明同步異步、阻塞非阻塞,我們以小明去買奶茶為例。 1、同步與異

Nginx作為動靜分離、緩存與負載均衡初探

yum 後端 don 巖機 cati max 需要 ssi 上線 一、概述: 我之前有一篇文章寫了Nginx作為web服務器的http與https的初探 作為nginx基礎介紹,作為web服務器使用;今天要介紹的是nginx作為代理服務器和負載均衡服務器的入門介紹;實現內容

初探nginx負載均衡配置

conf location 提前 end stream nod header 還需要 如何 只簡單說一下upstream的配置,如何進行負載均衡後續還需要多了解 1.另準備一個配置文件命名為nginx_test.conf 為了不汙染原有的nginx.conf,提前復制一份配

nginx unit的初探

mage protoc 重新 linux nload 安裝 listen 加載 eas 安裝介紹: https://www.oschina.net/p/nginx-unit 可以看到,unit還是很強大的,居然特麽都支持go 還有python 在/etc/yum.r

nginx修改配置後reload原理初探

版權宣告:本文為博主原創文章,未經博主允許不得轉載。    https://blog.csdn.net/u012811805/article/details/76849668 前言 nginx啟動時,會啟動兩個程序: 一個是Master程序和worker程序。 改變配置

Nginx伺服器-伺服器架構初探

1.Nginx的模組化結構簡介     Nginx涉及到的模組分為核心模組,標準HTTP模組,可選HTTP模組,郵件服務模組以及第三方模組等五大類。核心模組是指Nginx伺服器正常執行必不可少的模組,它們提供了Nginx最基本最核心的服務,如程序管理、許可權控制、錯誤日誌記錄

nginx 配置多個主機

安裝 code -a reload res list onf 內容 efault 我現在想配置 兩個站點,通過域名來區分訪問不同的網站目錄 比如有個域名 baidu.com 第二個域名 google.com,我有兩個網站目錄, /opt/web/baidu;

Nginx安裝與使用

表示 cli 3.1 replace 需要 網站 pop emp 文字 Nginx安裝與使用 Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。由俄羅斯的程序設計師Igor Sysoev所

Nginx的安裝(筆記)

maximum 字符 erer min sse 最長路 gzip_vary plain bsp 0, 先決條件Nginx 依賴 pcre-devel, openssl, openssl-devel安裝命令:yum -y install pcre-devel openssl

STL初探——第一級配置 __malloc_alloc_template的學習心得

exception template 定義 stl 空間 似的 strong cep 對象   在第一級配置器中,一開始就定義了內存分配出錯的宏接口,如下: #ifndef __THROW_BAD_ALLOC # if defined(__STL_NO_BAD_ALLO

STL初探——第二級配置器 __default_alloc_template的學習心得

空間配置 def 管理 使用 函數 效率 需求 typename []   SGI STL 第二級配置器使用的是memory pool,即內存池,相比較於第一級空間配置器,第二級空間配置器多了許多限制,主要是為了防止申請小額區塊過多而造成內存碎片。當然小額區塊在配置時實際上

解決啟動nginx時報80端口被占用的問題

方法 端口被占用 -s med list exp 菜單 訪問項目 sel 如何解決啟動nginx時報80端口被占用 最近公司的的一個服務器上需要部署多個項目,但80端口只有一個,所有只有使用Nginx來代理,當訪問域名時就可以自動 轉到IP:端口號,而不需要在域名後面加端口

十四.nginx,web,反向代理,調用加權輪詢算法,nfs服務

文件夾 是否 觀察 查看 方式 har sys 重新啟動 chm 一.部署nginx反向代理web服務,調度算法使用加權輪詢: 1.首先配置一個nginx服務端,三個web客戶端。用vmware 新建虛擬機完成,並用xshell連接 2.在服務端和3個web客戶端都下載e

使用NGINX+Openresty實現WAF功能

dev 安裝nginx 404頁 echo eight 並不是 where erro ip報文 使用NGINX+Openresty實現WAF功能 一、了解WAF1.1 什麽是WAF Web應用防護系統(也稱:網站應用級入侵防禦系統 。英文:Web Application F

如何在遠程Linux服務器上搭建Nginx

http -i fig 手動 ges 密碼 技術分享 text cal 首先得申明一下使用的工具有: 1. putty https://pan.baidu.com/s/1i4Ix8Hn 2. fileZilla https://pan.baidu.com/s/