




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、高性能Web服務(wù)器Nginx及相關(guān)新技術(shù)的應(yīng)用實踐,北京金山軟件 逍遙網(wǎng) 張宴 2009.10,什么是Nginx?,Nginx (“engine x”) 是俄羅斯人Igor Sysoev(塞索耶夫)編寫的一款高性能的 HTTP 和反向代理服務(wù)器。 Nginx 已經(jīng)在俄羅斯最大的門戶網(wǎng)站 Rambler Media(www.rambler.ru)上運行了4年時間,同時俄羅斯超過20%的虛擬主機平臺采用Nginx作為反向代理服務(wù)器。 在國內(nèi),已經(jīng)有新浪博客、新浪播客、搜狐通行證、網(wǎng)易新聞、網(wǎng)易博客、金山逍遙網(wǎng)、金山愛詞霸、校內(nèi)網(wǎng)、YUPOO相冊、豆瓣、迅雷看看等多家網(wǎng)站、頻道使用 Nginx 服務(wù)
2、器。,Nginx的優(yōu)點,1、高并發(fā)連接:官方測試能夠支撐5萬并發(fā)連接,在實際生產(chǎn)環(huán)境中跑到23萬并發(fā)連接數(shù)。 2、內(nèi)存消耗少:在3萬并發(fā)連接下,開啟的10個Nginx 進程才消耗150M內(nèi)存(15M*10=150M)。 3、配置文件非常簡單:風(fēng)格跟程序一樣通俗易懂。 4、成本低廉:Nginx為開源軟件,可以免費使用。而購買F5 BIG-IP、NetScaler等硬件負(fù)載均衡交換機則需要十多萬至幾十萬人民幣。,Nginx的優(yōu)點,5、支持Rewrite重寫規(guī)則:能夠根據(jù)域名、URL的不同,將 HTTP 請求分到不同的后端服務(wù)器群組。 6、內(nèi)置的健康檢查功能:如果 Nginx Proxy 后端的某臺
3、 Web 服務(wù)器宕機了,不會影響前端訪問。 7、節(jié)省帶寬:支持 GZIP 壓縮,可以添加瀏覽器本地緩存的 Header 頭。 8、穩(wěn)定性高:用于反向代理,宕機的概率微乎其微。,單臺Nginx支撐了高達2.8萬的活動并發(fā)連接數(shù),2009-09-03 14:30,金山游戲劍俠情緣網(wǎng)絡(luò)版3臨時維護1小時,大量玩家上官網(wǎng),論壇、評論、客服等動態(tài)應(yīng)用Nginx服務(wù)器集群,每臺服務(wù)器的Nginx活動連接數(shù)達到2.8萬,這是本人遇到的Nginx生產(chǎn)環(huán)境最高并發(fā)值。,Nginx的主要應(yīng)用類別,1、使用 Nginx 結(jié)合FastCGI運行 PHP、JSP 、Perl等程序 2、使用 Nginx 作反向代理、負(fù)載
4、均衡、規(guī)則過濾 3、使用 Nginx 運行靜態(tài)HTML頁、圖片 4、Nginx與其他新技術(shù)的結(jié)合應(yīng)用,Nginx在金山逍遙網(wǎng)中的應(yīng)用案例,金山逍遙網(wǎng)()是金山游戲官方網(wǎng)站,為金山軟件旗下的各款游戲提供新聞資訊、客戶服務(wù)、在線充值、視聽互動、在線活動、博客、相冊、論壇、玩家社區(qū)等內(nèi)容建設(shè)和在線服務(wù)支持。,金山逍遙網(wǎng)Nginx七層負(fù)載均衡的應(yīng)用,Nginx承擔(dān)每個機房Web負(fù)載均衡服務(wù),簡單的Nginx負(fù)載均衡配置, upstream bbs_server_pool server 5:80 weight=1 max_fails=2 fail_timeout=30s; serv
5、er 6:80 weight=1 max_fails=2 fail_timeout=30s; server 7:80 weight=1 max_fails=2 fail_timeout=30s; server 8:80 weight=1 max_fails=2 fail_timeout=30s; 在nginx.conf配置文件中,用upstream指令定義一組反向代理/負(fù)載均衡后端服務(wù)器池。,簡單的Nginx負(fù)載均衡配置, server listen80; server_name *; location / proxy_pass
6、 http:/bbs_server_pool; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; access_log off; ,簡單的Nginx負(fù)載均衡配置,proxy_pass http:/bbs_server_pool; 用于指定反向代理的服務(wù)器池。 proxy_set_header Host $host; 當(dāng)后端Web服務(wù)器上也配置有多個虛擬主機時,需要用該Header來區(qū)分反向代理哪個主機名。 proxy_set_header X-Forwarded-For $remote_add
7、r; 如果后端Web服務(wù)器上的程序需要獲取用戶IP,請從該Header頭獲取。,Nginx負(fù)載均衡的雙機熱備,通常情況下的負(fù)載均衡HA高可用,優(yōu)點:實現(xiàn)了雙機熱備、故障自動轉(zhuǎn)移。 缺點:備機服務(wù)器處于閑置狀態(tài),浪費了硬件資源。,逍遙網(wǎng)Nginx負(fù)載均衡雙機互備,正常情況下,兩臺Nginx負(fù)載均衡服務(wù)器全部處于活動狀態(tài),對外提供服務(wù)。,服務(wù)器綁定IP別名,/sbin/ifconfig eth0:ha1 broadcast 55 netmask up /sbin/route add -host dev eth0:ha1
8、 /sbin/arping -I eth0 -c 3 -s 在服務(wù)器的外網(wǎng)網(wǎng)卡eth0上,綁定了一個虛擬IP ,綁定完成后發(fā)送arping包給網(wǎng)關(guān)。,服務(wù)器綁定IP別名,/sbin/ifconfig eth0:ha2 broadcast 55 netmask up /sbin/route add -host dev eth0:ha2 /sbin/arping -I eth0 -c 3 -s 在服務(wù)器的外網(wǎng)網(wǎng)卡eth0上,綁定了一
9、個虛擬IP ,綁定完成后發(fā)送arping包給網(wǎng)關(guān)。,新的Nginx雙機互備(發(fā)生故障時),自動接管公網(wǎng)虛擬IP,實現(xiàn)故障轉(zhuǎn)移,服務(wù)器去除IP別名,/sbin/ifconfig eth0:ha1 broadcast 55 netmask down 通過兩臺服務(wù)器之間的互相檢測機制,當(dāng)服務(wù)器上的檢測程序發(fā)現(xiàn)自身的Nginx無法訪問時,停止綁定虛擬IP ,服務(wù)器接管原服務(wù)器的虛擬IP,/sbin/ifconfig eth0:ha1 broadcast 55 netmask
10、 up /sbin/route add -host dev eth0:ha1 /sbin/arping -I eth0 -c 3 -s 給網(wǎng)關(guān)發(fā)送Arping包,保證了網(wǎng)關(guān)上IP、MAC地址對應(yīng)關(guān)系能夠馬上更改,能夠做到強行接管虛擬IP。,Nginx負(fù)載均衡URL分發(fā),硬件、軟件 七層負(fù)載均衡對比: NetScaler 與 Nginx,硬件、軟件 七層負(fù)載均衡對比: NetScaler 與 Nginx,根據(jù)不同的URL轉(zhuǎn)發(fā)到不同服務(wù)器,server listen 80; server_name ; location
11、 /admincp.php proxy_pass 1; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; location / proxy_pass http:/php_server_pool; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; ,Web相關(guān)文件的實時自動同步,少量文件的多服務(wù)器自動同步,使用Linux 2.6內(nèi)核的inotify監(jiān)控Linux
12、文件系統(tǒng)事件。 利用開源的lsync監(jiān)聽某一目錄,如果目錄內(nèi)文件發(fā)生增、刪、改,利用Rsync協(xié)議自動同步到多臺服務(wù)器。 lsyncd /data0/htdocs/ :hu_data/ :hu_data/ :hu_data/ :hu_data/,大量文件的多服務(wù)器自動同步,使用Linux 2.6內(nèi)核的inotify監(jiān)控Linux文件系統(tǒng)事件。 修改可監(jiān)控的最大目錄數(shù)量 echo 50000000 /proc/sys/fs/inotify/max_user_watches 金山逍遙網(wǎng)開發(fā)的sersync文件自
13、動同步程序,適合大量文件的自動同步,并可以在文件同步完成后,自動調(diào)用CDN緩存刷新接口,刷新發(fā)生修改、刪除的文件的訪問URL。 用于:金山游戲官網(wǎng)的CMS發(fā)布系統(tǒng)。,Nginx的Web緩存服務(wù),Nginx的緩存功能,Nginx從0.7.48版本開始,支持了類似Squid的緩存功能; 緩存把URL及相關(guān)組合當(dāng)作Key,用md5編碼哈希后保存; Nginx的Web緩存服務(wù)只能為指定URL或狀態(tài)碼設(shè)置過期時間,不支持類似Squid的PURGE指令,手動清除指定緩存頁面; 采用MMAP實現(xiàn),設(shè)置的緩存區(qū)大小不能超過物理內(nèi)存+SWAP的值。,反向代理中的Nginx.conf緩存配置, #設(shè)置Web緩存區(qū)
14、名稱為cache_one,緩存空間大小為2000MB,1天清理一次緩存,單個文件超過5m不緩存。 proxy_cache_path /data0/proxy_cache_path levels=1:2 keys_zone=cache_one:2000m inactive=1d max_size=5m; #注:proxy_temp_path和proxy_cache_path指定的路徑必須在同一分區(qū) proxy_temp_path /data0/proxy_temp_path; upstream my_server_pool server :80 weight=1 max_f
15、ails=2 fail_timeout=30s; server :80 weight=1 max_fails=2 fail_timeout=30s; ,反向代理中的Nginx.conf緩存配置,server listen 80; server_name ; location / proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_pass http:/my_server_pool; location .*.(gif|jpg|jpeg|png|bmp|swf|js
16、|css)$ #對圖片、JS、CSS進行緩存,使用Web緩存區(qū)cache_one proxy_cache cache_one;,反向代理中的Nginx.conf緩存配置,#對不同HTTP狀態(tài)碼緩存設(shè)置不同的緩存時間 proxy_cache_valid 200 10m; proxy_cache_valid 304 3m; proxy_cache_valid 301 302 1h; proxy_cache_valid any 1m; #設(shè)置Web緩存的Key值,Nginx根據(jù)Key值md5哈希存儲緩存,這里根據(jù)“域名、URI、客戶端請求Header頭中的If-Modified-Since信息”組合
17、成Key。 proxy_cache_key $host$request_uri$http_if_modified_since; #反向代理,訪問后端內(nèi)容源服務(wù)器 proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_pass http:/my_server_pool; access_log off; ,Nginx緩存功能的優(yōu)點,對于修改實時性要求不高的圖片、Flash、CSS樣式文件、JavaScript文件,可以在Nginx反向代理(負(fù)載均衡)服務(wù)器上設(shè)置緩存,不用每次請求都轉(zhuǎn)發(fā)到后
18、端Web服務(wù)器,加快了響應(yīng)速度。 減少了Nginx與后端Web服務(wù)器的連接數(shù),提高了Nginx處理性能。,Nginx的Rewrite重寫規(guī)則,Nginx Rewrite規(guī)則相關(guān)指令,Nginx Rewrite規(guī)則相關(guān)指令有if、rewrite、set、return、break等,其中rewrite是最關(guān)鍵的指令。一個簡單的Nginx Rewrite規(guī)則語法如下: rewrite /b/(.*).html /play.php?video=$1 break; 如果加上if語句,示例如下: if (!-f $request_filename) rewrite /img/(.*)$ /site/$ho
19、st/images/$1 last; ,Nginx與Apache的Rewrite規(guī)則實例對比,簡單的Nginx和Apache 重寫規(guī)則區(qū)別不大,基本上能夠完全兼容。例如: Apache Rewrite 規(guī)則: RewriteRule /(mianshi|xianjing)/$ /zl/index.php?name=$1 L RewriteRule /ceshi/$ /zl/ceshi.php L RewriteRule /(mianshi)_(a-zA-Z+)/$ /zl/index.php?name=$1_$2 L RewriteRule /pingce(0-9*)/$ /zl/pingce
20、.php?id=$1 L Nginx Rewrite 規(guī)則: rewrite /(mianshi|xianjing)/$ /zl/index.php?name=$1 last; rewrite /ceshi/$ /zl/ceshi.php last; rewrite /(mianshi)_(a-zA-Z+)/$ /zl/index.php?name=$1_$2 last; rewrite /pingce(0-9*)/$ /zl/pingce.php?id=$1 last; 由以上示例可以看出,Apache的Rewrite規(guī)則改為Nginx的Rewrite規(guī)則,其實很簡單:Apache的Rewr
21、iteRule指令換成Nginx的rewrite指令,Apache的L標(biāo)記換成Nginx的last標(biāo)記,中間的內(nèi)容不變。,Nginx與Apache的Rewrite規(guī)則實例對比,如果Apache的Rewrite規(guī)則改為Nginx的Rewrite規(guī)則后,使用nginx -t命令檢查發(fā)現(xiàn)nginx.conf配置文件有語法錯誤,那么可以嘗試給條件加上引號。例如一下的Nginx Rewrite規(guī)則會報語法錯誤: rewrite /(0-95).html$ /x.jsp?id=$1 last; 加上引號就正確了: rewrite /(0-95).html$ /x.jsp?id=$1 last;,Nginx
22、與Apache的Rewrite規(guī)則實例對比,Apache與Nginx的Rewrite規(guī)則在URL跳轉(zhuǎn)時有細微的區(qū)別: Apache Rewrite 規(guī)則: RewriteRule /html/tagindex/(a-zA-Z+)/.*$ /$1/ R=301,L Nginx Rewrite 規(guī)則: rewrite /html/tagindex/(a-zA-Z+)/.*$ http:/$host/$1/ permanent; 以上示例中,我們注意到,Nginx Rewrite 規(guī)則的置換串中增加了“http:/$host”,這是在Nginx中要求的。,Nginx與Apache的Rewrite規(guī)則
23、實例對比,另外,Apache與Nginx的Rewrite規(guī)則在變量名稱方面也有區(qū)別,例如: Apache Rewrite 規(guī)則: RewriteRule /user/login/$ /user/login.php?login=1,Nginx與Apache的Rewrite規(guī)則實例對比,Apache與Nginx Rewrite 規(guī)則的一些功能相同或類似的指令、標(biāo)記對應(yīng)關(guān)系: Apache的RewriteCond指令對應(yīng)Nginx的if指令; Apache的RewriteRule指令對應(yīng)Nginx的rewrite指令; Apache的R標(biāo)記對應(yīng)Nginx的redirect標(biāo)記; Apache的P標(biāo)記
24、對應(yīng)Nginx的last標(biāo)記; Apache的R,L標(biāo)記對應(yīng)Nginx的redirect標(biāo)記; Apache的P,L標(biāo)記對應(yīng)Nginx的last標(biāo)記; Apache的PT,L標(biāo)記對應(yīng)Nginx的last標(biāo)記;,Nginx與Apache的多條件Rewrite示例,允許指定的域名訪問本站,其他域名一律跳轉(zhuǎn)到 Apache Rewrite 規(guī)則: RewriteCond %HTTP_HOST (.*?)$ RewriteCond %HTTP_HOST !$ RewriteCond %DOCUMENT_ROOT/market/%1/index.htm -f RewriteRule /wu/$ /mar
25、ket/%1/index.htm L Nginx的if指令不支持嵌套,也不支持AND、OR等多條件匹配,相比于Apache的RewriteCond,顯得麻煩一些,但是,我們可以通過下一頁的Nginx配置寫法來實現(xiàn)這個示例:,Nginx與Apache的多條件Rewrite示例,Nginx Rewrite 規(guī)則: if ($host * (.*?)$) set $var_wupin_city $1; set $var_wupin 1; if ($host * $) set $var_wupin 0; if (!-f $document_root/market/$var_wupin_city/ind
26、ex.htm) set $var_wupin 0; if ($var_wupin 1) rewrite /wu/$ /market/$var_wupin_city/index.htm last; ,Nginx與金山逍遙TCSQL的配合,一般數(shù)據(jù)庫的緩存類型,一般數(shù)據(jù)庫緩存分為四種: 1、Key/Value單個對象緩存,如Memcached 2、列表緩存,就像論壇里帖子的列表 3、記錄條數(shù)的緩存,比如一個論壇板塊里有多少個帖子,這樣才方便實現(xiàn)分頁。 4、復(fù)雜一點的group,sum,count查詢,比如一個論壇里按點擊數(shù)排名的最HOT的帖子列表。 第一種比較好實現(xiàn),后面三種比較麻煩。,什么是TCSQL實時列表緩存數(shù)據(jù)庫?,TCSQL是金山逍遙網(wǎng)技術(shù)支持部平臺組以Tokyo Cabinet DBM為底層存儲與索引,結(jié)合類似Memcached的Key-Value內(nèi)存對象緩存,借鑒SQL語句的SELECT、INSERT、UPDATE、DELETE思想與功能開發(fā)的實時列表緩存數(shù)據(jù)庫,可實現(xiàn)對列表頁
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)院外包運營合同范本
- 發(fā)廊股合同范本
- 博士勞動合同范本
- 2025年供應(yīng)鏈金融業(yè)務(wù)培訓(xùn)助力企業(yè)轉(zhuǎn)型升級
- 勞務(wù)用工中介合同范例
- 公園ppp模式合同范本
- 中學(xué)歷史教師聘用合同范本
- 醫(yī)療投資合同范本
- 2024-2025學(xué)年江蘇省常州市高三上學(xué)期期末質(zhì)量調(diào)研語文試卷
- 廠銷合同范本
- 土石方運輸中介三方合同協(xié)議書
- 2024年四川省公務(wù)員考試《行測》真題及答案解析
- 上海市幼兒園幼小銜接活動指導(dǎo)意見(修訂稿)
- 投資可行性分析財務(wù)數(shù)據(jù)全套表格
- 2024-2025學(xué)年初中信息技術(shù)(信息科技)七年級上冊粵教清華版教學(xué)設(shè)計合集
- -小學(xué)英語人稱代詞與物主代詞講解課件(共58張課件).課件
- 2024年四年級英語下冊 Unit 8 How are you第4課時教案 譯林牛津版
- 2024年濟南廣播電視臺招考電視工作人員高頻500題難、易錯點模擬試題附帶答案詳解
- 《中國詩詞大會》九宮格(原題)
- 住院病人跌倒墜床風(fēng)險評估及防范措施表
- 人教版《道德與法治》二年級下冊全冊課件
評論
0/150
提交評論