Nginx

Nginx介紹

簡介

Nginx("engine x")是一個(gè)高性能的HTTP和反向代理服務(wù)器,也是一個(gè) IMAP/POP3/SMTP 代理服務(wù)器。第一個(gè)公開版本0.1.0發(fā)布于2004年10月4日。其將源代碼以類BSD許可證的形式發(fā)布,因它的穩(wěn)定性、豐富的功能集蜂嗽、示例配置文件和低系統(tǒng)資源的消耗而聞名。官方測(cè)試nginx能夠支撐5萬并發(fā)鏈接殃恒,并且cpu植旧、內(nèi)存等資源消耗卻非常低,運(yùn)行非常穩(wěn)定离唐。2011年6月1日病附,nginx 1.0.4發(fā)布。

Nginx是一款輕量級(jí)的Web 服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器亥鬓,并在一個(gè)BSD-like 協(xié)議下發(fā)行完沪。由俄羅斯的程序設(shè)計(jì)師Igor Sysoev所開發(fā),其特點(diǎn)是占有內(nèi)存少嵌戈,并發(fā)能力強(qiáng)覆积,事實(shí)上nginx的并發(fā)能力確實(shí)在同類型的網(wǎng)頁服務(wù)器中表現(xiàn)較好,中國大陸使用nginx網(wǎng)站用戶有:新浪熟呛、網(wǎng)易宽档、騰訊等。

功能:web服務(wù)器庵朝、web reverse proxy雌贱、smtp reverse proxy


Nginx和apache的比較

1. nginx相對(duì)于apache的優(yōu)點(diǎn):

輕量級(jí),同樣起web服務(wù)偿短,比apache占用更少的內(nèi)存及資源 ;

抗并發(fā)馋没,nginx處理請(qǐng)求是異步非阻塞的昔逗,而apache則是阻塞型的,在高并發(fā)下nginx 能保持低資源低消耗高性能 篷朵;

高度模塊化的設(shè)計(jì)勾怒,編寫模塊相對(duì)簡單 婆排; 社區(qū)活躍,各種高性能模塊出品迅速笔链。

2. apache 相對(duì)于nginx 的優(yōu)點(diǎn):

rewrite 段只,比nginx的rewrite強(qiáng)大 ; 模塊超多鉴扫,基本想到的都可以找到 赞枕; 少bug,nginx的bug相對(duì)較多坪创。

3. Nginx配置簡潔炕婶,Apache復(fù)雜 。

4. 最核心的區(qū)別在于apache是同步多進(jìn)程模型莱预,一個(gè)連接對(duì)應(yīng)一個(gè)進(jìn)程柠掂;nginx是異步的,多個(gè)連接(萬級(jí)別)可以對(duì)應(yīng)一個(gè)進(jìn)程依沮。

單個(gè)tomcat支持的最高并發(fā)


解決高并發(fā)和單個(gè)服務(wù)器過載問題


Tengine安裝

Tengine是由淘寶網(wǎng)發(fā)起的Web服務(wù)器項(xiàng)目涯贞。它在Nginx的基礎(chǔ)上,針對(duì)大訪問量網(wǎng)站的需求危喉,添加了很多高級(jí)功能和特性宋渔。Tengine的性能和穩(wěn)定性已經(jīng)在大型的網(wǎng)站如淘寶網(wǎng),天貓商城等得到了很好的檢驗(yàn)姥饰。它的最終目標(biāo)是打造一個(gè)高效傻谁、穩(wěn)定、安全列粪、易用的Web平臺(tái)审磁。

1. 解壓安裝包

[root@node001 local]# tar xf tengine-2.1.0.tar.gz

2. 進(jìn)入tengine目錄

[root@node001 local]# cd tengine-2.1.0/

3. 查看README文件,找到安裝方法

To install Tengine, just follow these three steps:

$ ./configure

$ make

# make install

4. 執(zhí)行configure文件岂座,指定安裝目錄

[root@node001 tengine-2.1.0]# ./configure --prefix=/usr/local/nginx

使用如下命令查看更多安裝選項(xiàng)

[root@node01 tengine-2.1.0]# ./configure --help

--help???????????????????????? ? ? ?? print this message

--prefix=PATH?????????????????? set installation prefix

--sbin-path=PATH???????????? set nginx binary pathname

--conf-path=PATH????????????? set nginx.conf pathname

--error-log-path=PATH?????? set error log pathname ……

5. 報(bào)錯(cuò):

./configure: error: C compiler cc is not found

6. 安裝gcc态蒂,再執(zhí)行configure文件

[root@node001 tengine-2.1.0]# yum install gcc

7. 報(bào)錯(cuò):

./configure: error: the HTTP rewrite module requires the PCRE library.

8. 查看PCRE有哪些版本

[root@node001 tengine-2.1.0]# yum search pcre

pcre-devel.i686 : Development files for pcre

pcre-devel.x86_64 : Development files for pcre

pcre-static.x86_64 : Static library for pcre

pcre.x86_64 : Perl-compatible regular expression library pcre.i686 : Perl-compatible regular expression library

9. 選擇安裝開發(fā)版,系統(tǒng)自動(dòng)識(shí)別安裝什么位數(shù)的軟件 [root@node001 tengine-2.1.0]# yum install pcre-devel

10. 再執(zhí)行configure文件

[root@node001 tengine-2.1.0]# ./configure --prefix=/usr/local/nginx

11. 報(bào)錯(cuò):

./configure: error: SSL modules require the OpenSSL library.

12. 根據(jù)pcre的經(jīng)驗(yàn)费什,安裝OpenSSL開發(fā)版 [root@node001 tengine-2.1.0]# yum install openssl-devel

13. 再執(zhí)行configure文件

[root@node001 tengine-2.1.0]# ./configure --prefix=/usr/local/nginx

看到如下信息說明configure文件執(zhí)行成功:

14. 執(zhí)行make命令

[root@node001 tengine-2.1.0]# make

15. 執(zhí)行make install命令

[root@node001 tengine-2.1.0]# make install

16. 將nginx文件放到/etc/init.d目錄下钾恢,并做修改 [root@node001 tengine-2.1.0]# vi /etc/init.d/nginx nginx="/usr/local/nginx/sbin/nginx" NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

17. 給nginx文件賦予執(zhí)行權(quán)限

[root@node001 tengine-2.1.0]# chmod +x nginx

18. 啟動(dòng)服務(wù)

[root@node001 sbin]# service nginx start

19. 驗(yàn)證是否啟動(dòng)

[root@node001 sbin]# service nginx status nginx (pid 6510 6508) is running...

20. 去網(wǎng)頁驗(yàn)證,看到如下頁面說明nginx安裝成功鸳址!


Nginx配置解析

nginx.conf配置文件的結(jié)構(gòu)

……

events{

……

}

http {

……

server{

……

}

server{

……

}

}

全局的配置

user nobody; #定義Nginx運(yùn)行的用戶和用戶組

說明:

[root@node01 tengine-2.1.0]# ps -fe | grep nginx root 1367 1335 0 13:18 pts/1 00:00:00 vi nginx.conf root 1608 1 0 14:32 ? 00:00:00 nginx: master process /opt/sxt/nginx/sbin/nginx –c /opt/sxt/nginx/conf/nginx.conf nobody 1610 1608 0 14:32 ? 00:00:00 nginx: worker process root 1626 1097 0 14:45 pts/0 00:00:00 grep nginx [root@node01 tengine-2.1.0]# service nginx status nginx (pid 1610 1608) 正在運(yùn)行...

master process不負(fù)責(zé)處理客戶端連接請(qǐng)求瘩蚪,負(fù)責(zé)對(duì)worker process的監(jiān)管,而worker process負(fù)責(zé)處理客戶端請(qǐng)求稿黍。Nginx支持熱加載和熱升級(jí)疹瘦,比如更新了配置文件后執(zhí)行reload命令,master會(huì)開出一個(gè)新進(jìn)程去讀取更新過的配置文件巡球,而worker進(jìn)程繼續(xù)保持從舊請(qǐng)求的連接言沐,直到舊進(jìn)程死亡邓嘹,新進(jìn)程會(huì)與新請(qǐng)求連接。master process由root啟動(dòng)险胰,worker process由nobody啟動(dòng)汹押,權(quán)限較小。

worker_processes 1; #nginx進(jìn)程數(shù)起便,建議設(shè)置為等于虛擬機(jī)CPU總核心數(shù)

error_log logs/error.log;

error_log logs/error.log notice;

error_log logs/error.log info;

#全局錯(cuò)誤日志定義類型棚贾,[ debug | info | notice | warn | error | crit ]

pid logs/nginx.pid; #進(jìn)程文件

event下的一些配置及其意義

use epoll;

#參考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]缨睡;

#epoll模型是Linux 2.6以上版本內(nèi)核中的高性能網(wǎng)絡(luò)I/O模型

#如果跑在FreeBSD上面鸟悴,就用kqueue模型。

worker_connections 1024; #單個(gè)進(jìn)程最大連接數(shù)(最大連接數(shù)=連接數(shù)*進(jìn)程數(shù))

#假設(shè)worker_processes為8

#系統(tǒng)可以打開的最大文件數(shù)和內(nèi)存大小成正比

#查看自己的系統(tǒng)可以打開的最大文件數(shù) cat /proc/sys/fs/file-max :97318

#并發(fā)連接總數(shù)小于系統(tǒng)可以打開的文件總數(shù)奖年,這樣就在操作系統(tǒng)可以承受的范圍之內(nèi)

#選擇最大連接數(shù)為80000

#在設(shè)置了反向代理的情況下细诸,根據(jù)經(jīng)驗(yàn),最大連接數(shù)應(yīng)該再除以4陋守,就是20000

#所以單個(gè)進(jìn)程最大連接數(shù)為20000/8 = 2500

#同時(shí)應(yīng)該調(diào)整系統(tǒng)的單個(gè)進(jìn)程可以打開的文件數(shù)

#使用ulimit –a查看到open file =1024

#應(yīng)該調(diào)整系統(tǒng)的單個(gè)進(jìn)程最大打開文件數(shù)(該數(shù)值x進(jìn)程數(shù)<=97318)

#ulimit -SHn 10000

http下的一些配置及其意義

include mime.types; #文件擴(kuò)展名與文件類型映射表

default_type application/octet-stream; #默認(rèn)文件類型

log_format main '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

#日志格式

access_log logs/access.log main; #日志文件位置

sendfile on;

#開啟高效文件傳輸模式震贵,sendfile指令指定nginx是否調(diào)用sendfile函數(shù)來輸出文件,對(duì)于普通應(yīng)用設(shè)為 on水评,如果用來進(jìn)行下載等應(yīng)用磁盤IO重負(fù)載應(yīng)用猩系,可設(shè)置為off,以平衡磁盤與網(wǎng)絡(luò)I/O處理速度中燥,降低系統(tǒng)的負(fù)載寇甸。注意:如果圖片顯示不正常把這個(gè)改成off.

原理,比如Nginx接受用戶對(duì)某文件的請(qǐng)求疗涉,nginx不能直接讀取磁盤的內(nèi)容拿霉,需要經(jīng)過內(nèi)核的調(diào)用,nginx告訴內(nèi)核需要讀取x文件咱扣,內(nèi)核會(huì)讀取x文件到內(nèi)核的內(nèi)存中绽淘,在把這個(gè)文件copy到nginx的內(nèi)存堆中,nginx得知數(shù)據(jù)已經(jīng)準(zhǔn)備好闹伪,會(huì)再把這個(gè)文件發(fā)給內(nèi)核沪铭,內(nèi)核切片之后發(fā)送給用戶。當(dāng)并發(fā)數(shù)過大時(shí)太耗費(fèi)資源偏瓤,所以這個(gè)選項(xiàng)的存在是為了減少文件在兩個(gè)內(nèi)存之間的copy杀怠,提高效率。

keepalive_timeout 0; #長連接超時(shí)時(shí)間厅克,單位是秒(與keeplived軟件無關(guān))

#gzip on; #開啟gzip壓縮輸出

server下的一些配置及其意義

listen 80; #監(jiān)聽的IP和地址

server_name www.bbb.com; #主機(jī)名

location / {

root /opt; #網(wǎng)頁文件存放的目錄

index index.html index.htm;

#默認(rèn)首頁文件赔退,順序從小到右,如果找不到index.html已骇,則index.htm為首頁

autoindex on; #開啟目錄列表訪問离钝,合適下載服務(wù)器,默認(rèn)關(guān)閉褪储。

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末卵渴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鲤竹,更是在濱河造成了極大的恐慌浪读,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辛藻,死亡現(xiàn)場離奇詭異碘橘,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)吱肌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門痘拆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人氮墨,你說我怎么就攤上這事纺蛆。” “怎么了规揪?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵桥氏,是天一觀的道長。 經(jīng)常有香客問我猛铅,道長字支,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任奸忽,我火速辦了婚禮堕伪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘月杉。我一直安慰自己刃跛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布苛萎。 她就那樣靜靜地躺著桨昙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪腌歉。 梳的紋絲不亂的頭發(fā)上蛙酪,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音翘盖,去河邊找鬼桂塞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛馍驯,可吹牛的內(nèi)容都是我干的阁危。 我是一名探鬼主播玛痊,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼狂打!你這毒婦竟也來了擂煞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤趴乡,失蹤者是張志新(化名)和其女友劉穎对省,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晾捏,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蒿涎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惦辛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劳秋。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖裙品,靈堂內(nèi)的尸體忽然破棺而出俗批,到底是詐尸還是另有隱情,我是刑警寧澤市怎,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布岁忘,位于F島的核電站,受9級(jí)特大地震影響区匠,放射性物質(zhì)發(fā)生泄漏干像。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一驰弄、第九天 我趴在偏房一處隱蔽的房頂上張望麻汰。 院中可真熱鬧,春花似錦戚篙、人聲如沸五鲫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽位喂。三九已至,卻和暖如春乱灵,著一層夾襖步出監(jiān)牢的瞬間塑崖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來泰國打工痛倚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留规婆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像抒蚜,于是被迫代替她去往敵國和親掘鄙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容