nginx

1. Nginx的主要三個(gè)應(yīng)用場景

? ? 請求到達(dá) --> nginx:靜態(tài)資源服務(wù)望浩、API服務(wù)瀑晒、反向代理服務(wù)

? ? 1. 靜態(tài)資源服務(wù):通過本地文件系統(tǒng)提供服務(wù);

? ? 2. 反向代理服務(wù):緩存加速、負(fù)載均衡赚瘦;

? ? 3. API服務(wù):OpenResty

2. OpenResty:一種整合Nginx和lua的框架,由Nginx核心和很多第三方模塊組成奏寨;

? ? 1. 默認(rèn)集成了Lua開發(fā)環(huán)境起意,使得Nginx可以作為一個(gè)WebServer使用;

? ? 2. 借助于Nginx的事件驅(qū)動(dòng)模型和非阻塞IO服爷,可以實(shí)現(xiàn)高性能的Web應(yīng)用程序杜恰;

? ? 3. OpenResty提供了大量組件如Mysql、Redis仍源、Memcached等等心褐,使得在Nginx上開發(fā)Web應(yīng)用更方便、簡單笼踩。

3. lua

? ? 1. Lua 是一個(gè)小巧的腳本語言逗爹,作者是巴西人,目的是為了嵌入應(yīng)用程序中嚎于,從而為應(yīng)用程序提供靈活的擴(kuò)展和定制功能掘而;

? ? 2. Lua腳本可以很容易被C/C++代碼調(diào)用,也可以反過來調(diào)用C/C++的函數(shù)于购,使得Lua在應(yīng)用程序中可以被廣泛應(yīng)用袍睡;

? ? 3. Lua不僅僅作為擴(kuò)展腳本,也可以作為普通的配置文件肋僧,代替XML, ini等文件格式斑胜,并且更容易理解和維護(hù);

? ? 4. Lua由標(biāo)準(zhǔn)C編寫而成嫌吠,代碼簡潔優(yōu)美止潘,幾乎在所有操作系統(tǒng)和平臺(tái)上都可以編譯,運(yùn)行辫诅;

? ? 5. 一個(gè)完整的Lua解釋器不過200KB凭戴,在目前所有腳本引擎中,Lua的速度是最快的炕矮,這一切都決定了Lua是作為嵌入式腳本的最佳選擇么夫。

4. Nginx的優(yōu)點(diǎn)

? ? 1. 輕量級,同樣起web服務(wù)比apache占用更少內(nèi)存及資源肤视;

? ? 2. Nginx 異步非阻塞的方式處理高并發(fā)請求魏割,能保持低資源、低消耗钢颂、高性能;

? ? 3. 高度模塊化設(shè)計(jì)拜银,編寫模塊相對簡單殊鞭,生態(tài)圈強(qiáng)大遭垛。

? ? 4. 核心有點(diǎn):高并發(fā)、高性能操灿、高可擴(kuò)展锯仪、高可靠性、熱部署趾盐、BSD許可證庶喜。

5. Nginx為什么性能高、占用內(nèi)存少救鲤?

? ? 1. Nginx采用多進(jìn)程模式久窟,對每個(gè)worker進(jìn)程來說,獨(dú)立的進(jìn)程不需要加鎖本缠,互不影響斥扛;

? ? 2. 一個(gè)進(jìn)程退出后,其他進(jìn)程繼續(xù)工作丹锹,服務(wù)不會(huì)中斷稀颁,master進(jìn)程則很快啟動(dòng)新的worker進(jìn)程;

? ? 3. worker進(jìn)程異常退出肯定是程序有bug導(dǎo)致楣黍,但也只會(huì)影響當(dāng)前worker上的請求匾灶,不會(huì)影響到其他進(jìn)程的請求,降低風(fēng)險(xiǎn)租漂;

? ? 4. Nginx采用異步非阻塞的方式去處理請求阶女,更加高效。

6. Nginx組成:

? ? 1. 二進(jìn)制可執(zhí)行文件:由各模塊源碼編出的一個(gè)文件窜锯;

? ? 2. 配置文件:控制Nginx的行為张肾;

? ? 3. 訪問日志:記錄每一條http請求信息;

? ? 4. 錯(cuò)誤日志:定位問題锚扎。

Nginx的編譯安裝(Linux)

1.下載nginx壓縮包:wget http://nginx.org/download/nginx-1.15.9.tar.gz2.解壓目錄結(jié)構(gòu):1.auto目錄:輔助編譯等功能吞瞪;2.conf目錄中是示例配置文件;3.configure腳本:生成中間文件驾孔,執(zhí)行編譯前的必備動(dòng)作芍秆;4.把contrib/vim下的文件移入~/.vim目錄下,讓vim識別nginx的配置文件節(jié)點(diǎn)翠勉;? ? ? cp -r contrib/vim/* ~/.vim? ---> vim conf/nginx.conf 打開配置文件 */5.html目錄:50x.html和index.html(Nginx歡迎頁)妖啥,發(fā)生500錯(cuò)誤會(huì)重定向到50x.html6.man目錄:Linux對nginx的幫助文件;7.src目錄:nginx的源代碼对碌;8.查看configure支持的參數(shù):./configure --help? ? ? --prefix=path:使用默認(rèn)參數(shù)荆虱,path表示nginx的安裝目錄2.編譯安裝1.開始編譯準(zhǔn)備:./configure --prefix=/home/develop/nginx2.生成 objs 目錄,存放生成的中間文件,其中 ngx_modules.c 決定了哪些模塊會(huì)被編譯進(jìn)nginx3.執(zhí)行編譯:make怀读,編譯完成后生成的中間文件和最終要運(yùn)行的nginx二進(jìn)制文件存放在 objs 目錄中诉位;4.如果是執(zhí)行nginx版本升級,不能執(zhí)行 make install 安裝菜枷,而是把 objs 中的目標(biāo)文件nginx 拷貝到安裝目錄中苍糠;5.C語言編譯生成的中間文件存放在 objs/src 中;6.如果使用了動(dòng)態(tài)模塊啤誊,其編譯生成的so文件也會(huì)存放在 objs 目錄中岳瞭;7.首次安裝時(shí),執(zhí)行 make install8.安裝目錄nginx:sbin(二進(jìn)制文件目錄)蚊锹,conf(配置文件目錄)瞳筏,logs(日志目錄),html(50x.html和index.html)

Nginx部署

1. 通用語法1. 配置文件由指令與指令塊構(gòu)成枫耳;2. 每條指令以 ; 結(jié)尾乏矾,指令與參數(shù)間以空格符分割;3. 指令塊以 {} 將多條指令組織在一起迁杨;4.include語句允許組合多個(gè)配置文件钻心,以提升可維護(hù)性;5. 使用# 添加注釋铅协,提高可閱讀性捷沸;6. 使用 $ 引用變量;7. 部分指令的參數(shù)支持正則表達(dá)式狐史。2. 配置參數(shù)1. 時(shí)間單位:ms(毫秒)痒给、s(秒)、m(分鐘)骏全、h(小時(shí))苍柏、d(天)、w(周)姜贡、M(月)试吁、y(年)2. 空間單位:不加任何單位表示bytes,k/K表示KB楼咳,m/M表示MB熄捍,g/G表示GB;3. http配置的指令塊:http母怜、server余耽、location、upstream4. nginx命令行1. 啟動(dòng)nginx:進(jìn)入nginx/sbin目錄苹熏,執(zhí)行 ./nginx2. 把nginx設(shè)置為全局命令:進(jìn)入sbin目錄犬钢,cp nginx /usr/sbin/? ? 訪問本機(jī)IP地址如http://192.168.181.128/,進(jìn)入Nginx的歡迎頁淮逊,則安裝成功3. nginx -h:幫助4. nginx -c 配置文件路徑:使用指定的配置文件5. nginx -g、-p:指定配置指令粱锐、指定運(yùn)行目錄6. nginx -t、-T:測試配置文件是否有語法錯(cuò)誤扛邑;7. nginx -v、-V:nginx的版本信息铐然、編譯信息等蔬崩;8. 發(fā)送信號 -s? ? ? ? nginx -s stop:立刻停止服務(wù)? ? ? ? nginx -s quit:優(yōu)雅的停止服務(wù)? ? ? ? nginx -s reload:在nginx不停止的情況下重載配置文件? ? ? ? nginx -s reopen:重新開始記錄日志文件5. 熱部署(熱升級)1. 備份當(dāng)前正在運(yùn)行的舊版本nginx/sbin下的二進(jìn)制文件nginx:cp nginx nginx.old2. 在把新版本的二進(jìn)制文件nginx拷貝到舊版本nginx/sbin目錄下:cp -r objs/nginx /home/dev/nginx/sbin/ -f3. 通知nginx的master進(jìn)程準(zhǔn)備進(jìn)行熱部署:kill -USR2 master進(jìn)程ID4. master進(jìn)程會(huì)使用新版二進(jìn)制文件nginx,啟動(dòng)一個(gè)新的master進(jìn)程搀暑,同時(shí)把請求都平滑過渡給新的master進(jìn)程沥阳;5. 舊的worker進(jìn)程也不再監(jiān)聽80、443這樣的端口了自点,新的請求都會(huì)交給新的worker進(jìn)程6. 通知舊的master進(jìn)程優(yōu)雅的關(guān)閉其worker進(jìn)程:kill -WINCH 舊master進(jìn)程ID7. 舊的master進(jìn)程不會(huì)自動(dòng)退出桐罕,以便于做版本回退,讓舊master進(jìn)程拉起其worker進(jìn)程桂敛。6. 日志切割1. 在nginx正常運(yùn)行的情況下功炮,備份日志2. 拷貝一份日志到其他文件,再執(zhí)行 nginx -s reopen术唬,nginx會(huì)重新生成一個(gè)日志文件薪伏;3. 往往會(huì)用一個(gè) shell 腳本,每隔一段時(shí)間粗仓,自動(dòng)執(zhí)行一次日志備份和 reopen命令嫁怀。7. GoAccess:圖形化實(shí)時(shí)監(jiān)控Nginx的Log日志的工具,基于websocket

Nginx的架構(gòu)

Nginx是多進(jìn)程結(jié)構(gòu)借浊,由一個(gè)Master進(jìn)程塘淑、多個(gè)子進(jìn)程構(gòu)成,子進(jìn)程又分為Worder進(jìn)程和Cache進(jìn)程

? ? 1. 多進(jìn)程結(jié)構(gòu)保證了高可用性蚂斤、高可靠性存捺,進(jìn)程間的獨(dú)立性不會(huì)引發(fā)災(zāi)難性問題;

? ? 2. 而多線程是共享內(nèi)存空間的橡淆,一旦引發(fā)內(nèi)存錯(cuò)誤召噩,會(huì)導(dǎo)致多線程所在的進(jìn)程掛掉;

? ? 3. Worker進(jìn)程有多個(gè)逸爵,負(fù)責(zé)處理請求具滴,Master進(jìn)程負(fù)責(zé)監(jiān)控Worker進(jìn)程;

? ? 4. Cache進(jìn)程又分為Cache manager和Cache loader师倔,各有一個(gè)進(jìn)程构韵;

? ? 5. 進(jìn)程間通信使用共享內(nèi)存,協(xié)同工作.

nginx進(jìn)程管理:信號

1. Master進(jìn)程? ? 1. 監(jiān)控worker進(jìn)程:CHLD,當(dāng)子進(jìn)程終止時(shí)疲恢,會(huì)向Master進(jìn)程發(fā)送 CHLD 信號凶朗;? ? 如果Worker進(jìn)程意外終止,Master進(jìn)程能通過 CHLD 信號重新拉起Worker進(jìn)程显拳;? ? 2. 管理worker進(jìn)程:通常不會(huì)直接向worker進(jìn)程發(fā)送信號棚愤,而是通過向Master進(jìn)程發(fā)送信號,管理Worker進(jìn)程杂数;? ? 3. nginx命令發(fā)送的信號:? ? ? ? TERM宛畦、INT(立刻停止Nginx進(jìn)程),QUIT(優(yōu)雅地停止Nginx進(jìn)程)揍移,? ? ? ? HUP(重載配置文件)次和,USR1(重新打開日志文件,做日志文件地切割)? ? 4. Linux命令kill發(fā)送的信號:USR2那伐,WINCH(nginx還沒有對應(yīng)的nginx命令)2. Worker進(jìn)程:TERM踏施、INT,QUIT罕邀,USR1畅形,WINCH? ? 1. nginx命令:? ? reload:HUP,reopen:USR1燃少,stop:TERM束亏,quit:QUIT3. 熱升級流程? ? 1. 將舊nginx二進(jìn)制文件備份,然后替換成新nginx二進(jìn)制文件阵具;? ? 2. 向master進(jìn)程發(fā)送USR2信號碍遍;? ? 3. master進(jìn)程修改pid文件名,加后綴.oldbin? ? 4. master進(jìn)程用新nginx二進(jìn)制文件啟動(dòng)新master進(jìn)程阳液;? ? 5. 向老master進(jìn)程發(fā)送WINCH信號怕敬,關(guān)閉老worker進(jìn)程;? ? 6. 回滾:向老master進(jìn)程發(fā)送HUP帘皿,向新master發(fā)送QUIT东跪。4. 優(yōu)雅的關(guān)閉Workder進(jìn)程? ? 1. 優(yōu)雅的關(guān)閉主要針對http請求,因?yàn)橹T如websocket連接鹰溜,nginx無法判定是否處于通信狀態(tài)虽填;? ? 2. Worker進(jìn)程可以識別當(dāng)前的進(jìn)程沒有http處理請求,盡可能不讓用戶接收到連接失敳芏斋日;? ? 3. 關(guān)閉過程:? ? ? ? 1. 設(shè)置定時(shí)器:worker_shutdown_timeout,加上標(biāo)志位? ? ? ? 2. 關(guān)閉監(jiān)聽句柄:不在接受新的請求連接? ? ? ? 3. 關(guān)閉空閑連接? ? ? ? 4. 在循環(huán)中等待全部連接關(guān)閉:如果定時(shí)時(shí)間到了墓陈,請求還沒有處理完成恶守,仍然強(qiáng)制關(guān)閉? ? ? ? 5. 退出進(jìn)程5. Nginx事件收集第献、分發(fā)器的驅(qū)動(dòng)模型:epoll6. Nginx中最常用的容器:紅黑樹

http://www.reibang.com/p/844664a1a9c5

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市兔港,隨后出現(xiàn)的幾起案子庸毫,更是在濱河造成了極大的恐慌,老刑警劉巖衫樊,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件飒赃,死亡現(xiàn)場離奇詭異,居然都是意外死亡科侈,警方通過查閱死者的電腦和手機(jī)盒揉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來兑徘,“玉大人,你說我怎么就攤上這事羡洛」夷裕” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵欲侮,是天一觀的道長崭闲。 經(jīng)常有香客問我,道長威蕉,這世上最難降的妖魔是什么刁俭? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮韧涨,結(jié)果婚禮上牍戚,老公的妹妹穿的比我還像新娘。我一直安慰自己虑粥,他們只是感情好如孝,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著娩贷,像睡著了一般第晰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上彬祖,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天茁瘦,我揣著相機(jī)與錄音,去河邊找鬼储笑。 笑死甜熔,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的南蓬。 我是一名探鬼主播纺非,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼哑了,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了烧颖?” 一聲冷哼從身側(cè)響起弱左,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎炕淮,沒想到半個(gè)月后拆火,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡涂圆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年们镜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片润歉。...
    茶點(diǎn)故事閱讀 39,977評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡模狭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出踩衩,到底是詐尸還是另有隱情嚼鹉,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布驱富,位于F島的核電站锚赤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏褐鸥。R本人自食惡果不足惜线脚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望叫榕。 院中可真熱鬧浑侥,春花似錦、人聲如沸翠霍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽寒匙。三九已至零如,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锄弱,已是汗流浹背考蕾。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留会宪,地道東北人肖卧。 一個(gè)月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像掸鹅,于是被迫代替她去往敵國和親塞帐。 傳聞我的和親對象是個(gè)殘疾皇子拦赠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評論 2 355

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

  • 大多數(shù) Nginx 新手都會(huì)頻繁遇到這樣一個(gè)困惑,那就是當(dāng)同一個(gè)location配置塊使用了多個(gè) Nginx 模塊...
    SkTj閱讀 7,697評論 0 12
  • 1.簡介: ? Nginx:engine X 葵姥,2002年荷鼠,開源,商業(yè)版? http協(xié)議:web服務(wù)器(類似于ht...
    尛尛大尹閱讀 1,867評論 0 3
  • 初識Nginx Nginx 特點(diǎn) 高并發(fā)榔幸,高性能epoll io 模型處理大并發(fā)請求32核64G服務(wù)器能支持100...
    DivenYang閱讀 891評論 0 1
  • http://blog.csdn.net/gnail_oug/article/details/52754491 n...
    不排版閱讀 3,286評論 1 1
  • 和我交談幾句后允乐,TA便離開了,落寞的背影削咆,處處透著虛弱與孤寂牍疏。 TA說TA被強(qiáng)暴了,看得出來拨齐,衣衫破裂鳞陨,雙目通紅,...
    若青w閱讀 154評論 0 0