版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、高性能高性能Web服務器服務器Nginx及相關新技術的應用實踐及相關新技術的應用實踐 北京金山軟件 逍遙網(wǎng) 張宴 2021.10什么是什么是Nginx? Nginx (“engine x”) Nginx (“engine x”) 是俄羅斯人是俄羅斯人Igor Igor Sysoev(Sysoev(塞索耶夫塞索耶夫) )編寫的一款高性能的編寫的一款高性能的 和反向和反向代理服務器。代理服務器。 Nginx Nginx 已經在俄羅斯最大的門戶網(wǎng)站已經在俄羅斯最大的門戶網(wǎng)站 Rambler MediaRambler Mediarambler.rurambler.ru上運行了上運行了4 4年時間,年時
2、間,同時俄羅斯超過同時俄羅斯超過20%20%的虛擬主機平臺采用的虛擬主機平臺采用NginxNginx作作為反向代理服務器。為反向代理服務器。 在國內,已經有新浪博客、新浪播客、搜狐通行在國內,已經有新浪博客、新浪播客、搜狐通行證、網(wǎng)易新聞、網(wǎng)易博客、金山逍遙網(wǎng)、金山愛證、網(wǎng)易新聞、網(wǎng)易博客、金山逍遙網(wǎng)、金山愛詞霸、校內網(wǎng)、詞霸、校內網(wǎng)、YUPOOYUPOO相冊、豆瓣、迅雷看看等多相冊、豆瓣、迅雷看看等多家網(wǎng)站、頻道使用家網(wǎng)站、頻道使用 Nginx Nginx 服務器。服務器。Nginx的優(yōu)點的優(yōu)點 1 1、高并發(fā)連接:官方測試能夠支撐、高并發(fā)連接:官方測試能夠支撐5 5萬并發(fā)連萬并發(fā)連接,在實
3、際生產環(huán)境中跑到接,在實際生產環(huán)境中跑到2 23 3萬并發(fā)連接數(shù)。萬并發(fā)連接數(shù)。 2 2、內存消耗少:在、內存消耗少:在3 3萬并發(fā)連接下,開啟的萬并發(fā)連接下,開啟的1010個個Nginx Nginx 進程才消耗進程才消耗150M150M內存內存15M15M* *10=150M10=150M)。)。 3 3、配置文件非常簡單:風格跟程序一樣通俗、配置文件非常簡單:風格跟程序一樣通俗易懂。易懂。 4 4、成本低廉:、成本低廉:NginxNginx為開源軟件,可以免費使為開源軟件,可以免費使用。而購買用。而購買F5 BIG-IPF5 BIG-IP、NetScalerNetScaler等硬件負載等硬
4、件負載均衡交換機則需要十多萬至幾十萬人民幣。均衡交換機則需要十多萬至幾十萬人民幣。Nginx的優(yōu)點的優(yōu)點 5 5、支持、支持RewriteRewrite重寫規(guī)則:能夠根據(jù)域名、重寫規(guī)則:能夠根據(jù)域名、URLURL的不同,將的不同,將 請求分到不同的后端服務請求分到不同的后端服務器群組。器群組。 6 6、內置的健康檢查功能:假設、內置的健康檢查功能:假設 Nginx Nginx Proxy Proxy 后端的某臺后端的某臺 Web Web 服務器宕機了,不服務器宕機了,不會影響前端訪問。會影響前端訪問。 7 7、節(jié)省帶寬:支持、節(jié)省帶寬:支持 GZIP GZIP 緊縮,可以添加緊縮,可以添加瀏覽
5、器本地緩存的瀏覽器本地緩存的 Header Header 頭。頭。 8 8、穩(wěn)定性高:用于反向代理,宕機的概率、穩(wěn)定性高:用于反向代理,宕機的概率微乎其微。微乎其微。單臺單臺Nginx支撐了高達支撐了高達2.8萬的活動并發(fā)連接數(shù)萬的活動并發(fā)連接數(shù)2021-09-03 14:302021-09-03 14:30,金山游戲,金山游戲 3臨時維護臨時維護1 1小時,大量玩家上官網(wǎng),論壇、評論、客服等動態(tài)應用小時,大量玩家上官網(wǎng),論壇、評論、客服等動態(tài)應用NginxNginx服務器集群,每臺服務器的服務器集群,每臺服務器的NginxNginx活動連接數(shù)達到活動連接數(shù)達到2.82.8萬,這是本人遇到的萬
6、,這是本人遇到的NginxNginx生產環(huán)境最高并發(fā)值。生產環(huán)境最高并發(fā)值。Nginx的主要應用類別的主要應用類別 1 1、運用、運用 Nginx Nginx 結合結合FastCGIFastCGI運行運行 PHP PHP、JSP JSP 、PerlPerl等程序等程序 2 2、運用、運用 Nginx Nginx 作反向代理、負載均衡、作反向代理、負載均衡、規(guī)則過濾規(guī)則過濾 3 3、運用、運用 Nginx Nginx 運行靜態(tài)運行靜態(tài)HTMLHTML頁、圖片頁、圖片 4 4、NginxNginx與其他新技術的結合應用與其他新技術的結合應用Nginx在金山逍遙網(wǎng)中的應用案例在金山逍遙網(wǎng)中的應用案例
7、 金山逍遙網(wǎng)(xoyo)是金山游戲官方網(wǎng)站,為金山軟件旗下的各款游戲提供新聞資訊、客戶服務、在線充值、視聽互動、在線活動、博客、相冊、論壇、玩家社區(qū)等內容建設和在線服務支持。金山逍遙網(wǎng)金山逍遙網(wǎng)Nginx七層負載均衡的應用七層負載均衡的應用Nginx承擔每個機房承擔每個機房Web負載均衡服務負載均衡服務簡單的簡單的Nginx負載均衡配置負載均衡配置 upstream bbs_server_pool server 5:80 weight=1 max_fails=2 fail_timeout=30s; server 6:80 weight=1 max_f
8、ails=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指令定義一組反向代理/負載均衡后端服務器池。簡單的簡單的Nginx負載均衡配置負載均衡配置 server listen80; server_name bbs.yourdomain *.bbs.yourdomain; location / proxy_
9、pass bbs_server_pool; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; access_log off; 簡單的簡單的Nginx負載均衡配置負載均衡配置 proxy_pass bbs_server_pool; 用于指定反向代理的服務器池。 proxy_set_header Host $host; 當后端Web服務器上也配置有多個虛擬主機時,需要用該Header來區(qū)分反向代理哪個主機名。 proxy_set_header X-Forwarded-For $remote_add
10、r; 如果后端Web服務器上的程序需要獲取用戶IP,請從該Header頭獲取。Nginx負載均衡的雙機熱備負載均衡的雙機熱備通常情況下的負載均衡HA高可用優(yōu)點:實現(xiàn)了雙機熱備、故障自動轉移。優(yōu)點:實現(xiàn)了雙機熱備、故障自動轉移。缺陷:備機服務器處于閑置狀態(tài),浪費了硬件資源。缺陷:備機服務器處于閑置狀態(tài),浪費了硬件資源。逍遙網(wǎng)逍遙網(wǎng)Nginx負載均衡雙機互備負載均衡雙機互備正常情況下,兩臺Nginx負載均衡服務器全部處于活動狀態(tài),對外提供服務。服務器綁定服務器綁定IP別名別名 /sbin/ifconfig eth0:ha1 broadcast 55 netmask
11、 up /sbin/route add -host dev eth0:ha1 /sbin/arping -I eth0 -c 3 -s 在服務器的外網(wǎng)網(wǎng)卡eth0上,綁定了一個虛擬IP ,綁定完成后發(fā)送arping包給網(wǎng)關。服務器綁定服務器綁定IP別名別名 /sbin/ifconfig eth0:ha2 broadcast 55 netmask up /sbin/route add -host dev eth0:ha2
12、 /sbin/arping -I eth0 -c 3 -s 在服務器的外網(wǎng)網(wǎng)卡eth0上,綁定了一個虛擬IP ,綁定完成后發(fā)送arping包給網(wǎng)關。新的新的Nginx雙機互備雙機互備(發(fā)生故障時發(fā)生故障時)自動接管公網(wǎng)虛擬IP,實現(xiàn)故障轉移服務器去除服務器去除IP別名別名 /sbin/ifconfig eth0:ha1 broadcast 55 netmask down 通過兩臺服務器之間的互相檢測機制,當服務器上的檢測程序發(fā)現(xiàn)自身的Nginx無法訪問時,停止綁定虛擬IP 61.1
13、.1.2服務器接管原服務器的虛擬服務器接管原服務器的虛擬IP /sbin/ifconfig eth0:ha1 broadcast 55 netmask up /sbin/route add -host dev eth0:ha1 /sbin/arping -I eth0 -c 3 -s 給網(wǎng)關發(fā)送Arping包,保證了網(wǎng)關上IP、MAC地址對應關系能夠馬上更改,能夠做到強行接管虛擬IP。Nginx負載均衡負載均衡URL分發(fā)分發(fā)硬件、軟件七層負載均衡對比:NetScaler與Ngin
14、x硬件、軟件七層負載均衡對比:NetScaler與Nginx根據(jù)不同的根據(jù)不同的URL轉發(fā)到不同服務器轉發(fā)到不同服務器server listen 80; server_name abc.domain; location /admincp.php proxy_pass 1; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; location / proxy_pass php_server_pool; proxy_set_header Host $host; proxy_se
15、t_header X-Forwarded-For $remote_addr; Web相關文件的實時自動同步相關文件的實時自動同步少量文件的多服務器自動同步少量文件的多服務器自動同步 使用Linux 2.6內核的inotify監(jiān)控Linux文件系統(tǒng)事件。 利用開源的lsync監(jiān)聽某一目錄,如果目錄內文件發(fā)生增、刪、改,利用Rsync協(xié)議自動同步到多臺服務器。code.google/p/lsyncd/ lsyncd /data0/htdocs/hu.xoyo/data/ :hu_data/ :hu_data/ :hu_data/ 1
16、:hu_data/大量文件的多服務器自動同步大量文件的多服務器自動同步 使用Linux 2.6內核的inotify監(jiān)控Linux文件系統(tǒng)事件。 修改可監(jiān)控的最大目錄數(shù)量 echo 50000000 /proc/sys/fs/inotify/max_user_watches 金山逍遙網(wǎng)開發(fā)的sersync文件自動同步程序,適合大量文件的自動同步,并可以在文件同步完成后,自動調用CDN緩存刷新接口,刷新發(fā)生修改、刪除的文件的訪問URL。 用于:金山游戲官網(wǎng)的CMS發(fā)布系統(tǒng)。Nginx的的Web緩存服務緩存服務Nginx的緩存功能的緩存功能 Nginx從0.7.48版本開始,支持
17、了類似Squid的緩存功能; 緩存把URL及相關組合當作Key,用md5編碼哈希后保存; Nginx的Web緩存服務只能為指定URL或狀態(tài)碼設置過期時間,不支持類似Squid的PURGE指令,手動清除指定緩存頁面; 采用MMAP實現(xiàn),設置的緩存區(qū)大小不能超過物理內存+SWAP的值。反向代理中的反向代理中的Nginx.conf緩存配置緩存配置#設置Web緩存區(qū)名稱為cache_one,緩存空間大小為2000MB,1天清理一次緩存,單個文件超過5m不緩存。proxy_cache_path /data0/proxy_cache_path levels=1:2 keys_zone=cache_one:
18、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_fails=2 fail_timeout=30s; server :80 weight=1 max_fails=2 fail_timeout=30s;反向代理中的反向代理中的Nginx.conf緩存配置緩存配置server li
19、sten 80; server_name my.domain; location / proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_pass my_server_pool; location .*.(gif|jpg|jpeg|png|bmp|swf|js|css)$ #對圖片、JS、CSS進行緩存,使用Web緩存區(qū)cache_one proxy_cache cache_one;反向代理中的反向代理中的Nginx.conf緩存配置緩存配置 #對不同HTTP狀態(tài)碼緩存設置不同的緩存
20、時間 proxy_cache_valid 200 10m; proxy_cache_valid 304 3m; proxy_cache_valid 301 302 1h; proxy_cache_valid any 1m; #設置Web緩存的Key值,Nginx根據(jù)Key值md5哈希存儲緩存,這里根據(jù)“域名、URI、客戶端請求Header頭中的If-Modified-Since信息組合成Key。 proxy_cache_key $host$request_uri$http_if_modified_since; #反向代理,訪問后端內容源服務器 proxy_set_header Host $ho
21、st; proxy_set_header X-Forwarded-For $remote_addr; proxy_pass my_server_pool; access_log off;Nginx緩存功能的優(yōu)點緩存功能的優(yōu)點 對于修改實時性要求不高的圖片、Flash、CSS樣式文件、JavaScript文件,可以在Nginx反向代理(負載均衡)服務器上設置緩存,不用每次請求都轉發(fā)到后端Web服務器,加快了響應速度。 減少了Nginx與后端Web服務器的連接數(shù),提高了Nginx處理性能。Nginx的的Rewrite重寫規(guī)則重寫規(guī)則Nginx Rewrite規(guī)則相關指令規(guī)則相關指令Nginx Re
22、write規(guī)則相關指令有if、rewrite、set、return、break等,其中rewrite是最關鍵的指令。一個簡單的Nginx Rewrite規(guī)則語法如下:rewrite /b/(.*).html /play.php?video=$1 break;如果加上if語句,示例如下:if (!-f $request_filename) rewrite /img/(.*)$ /site/$host/images/$1 last;Nginx與與Apache的的Rewrite規(guī)則實例對比規(guī)則實例對比簡單的Nginx和Apache 重寫規(guī)則區(qū)別不大,基本上能夠完全兼容。例如:Apache Rewri
23、te 規(guī)則:RewriteRule /(mianshi|xianjing)/$ /zl/index.php?name=$1 LRewriteRule /ceshi/$ /zl/ceshi.php LRewriteRule /(mianshi)_(a-zA-Z+)/$ /zl/index.php?name=$1_$2 LRewriteRule /pingce(0-9*)/$ /zl/pingce.php?id=$1 LNginx Rewrite 規(guī)則:rewrite /(mianshi|xianjing)/$ /zl/index.php?name=$1 last;rewrite /ceshi/$
24、 /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的RewriteRule指令換成Nginx的rewrite指令,Apache的L標記換成Nginx的last標記,中間的內容不變。Nginx與與Apache的的Rewrite規(guī)則實例對比規(guī)則實例對比如果Apache的Rewri
25、te規(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與與Apache的的Rewrite規(guī)則實例對比規(guī)則實例對比Apache與Nginx的Rewrite規(guī)則在URL跳轉時有細微的區(qū)別:Apache Rewrite 規(guī)則:RewriteRule /html/tagin
26、dex/(a-zA-Z+)/.*$ /$1/ R=301,LNginx Rewrite 規(guī)則:rewrite /html/tagindex/(a-zA-Z+)/.*$ $host/$1/ permanent;以上示例中,我們注意到,Nginx Rewrite 規(guī)則的置換串中增加了“$host”,這是在Nginx中要求的。Nginx與與Apache的的Rewrite規(guī)則實例對比規(guī)則實例對比另外,Apache與Nginx的Rewrite規(guī)則在變量名稱方面也有區(qū)別,例如:Apache Rewrite 規(guī)則:RewriteRule /user/login/$ /user/login.php?login
27、=1&forward=%HTTP_HOST LNginx Rewrite 規(guī)則:rewrite /user/login/$ /user/login.php?login=1&forward=$host last;Nginx與與Apache的的Rewrite規(guī)則實例對比規(guī)則實例對比Apache與Nginx Rewrite 規(guī)則的一些功能相同或類似的指令、標記對應關系:Apache的RewriteCond指令對應Nginx的if指令;Apache的RewriteRule指令對應Nginx的rewrite指令;Apache的R標記對應Nginx的redirect標記;Apache的P標
28、記對應Nginx的last標記;Apache的R,L標記對應Nginx的redirect標記;Apache的P,L標記對應Nginx的last標記;Apache的PT,L標記對應Nginx的last標記;Nginx與與Apache的多條件的多條件Rewrite示例示例允許指定的域名訪問本站,其他域名一律跳轉到允許指定的域名訪問本站,其他域名一律跳轉到aaaApache Rewrite 規(guī)則:規(guī)則:RewriteCond %HTTP_HOST (.*?).domain$RewriteCond %HTTP_HOST !qita.domain$RewriteCond %DOCUMENT_ROOT/m
29、arket/%1/index.htm -fRewriteRule /wu/$ /market/%1/index.htm LNginx的的if指令不支持嵌套,也不支持指令不支持嵌套,也不支持AND、OR等多條件匹配,相比于等多條件匹配,相比于Apache的的RewriteCond,顯得麻煩一些,但是,我們可以通過下一頁,顯得麻煩一些,但是,我們可以通過下一頁的的Nginx配置寫法來實現(xiàn)這個示例:配置寫法來實現(xiàn)這個示例:Nginx與與Apache的多條件的多條件Rewrite示例示例Nginx Rewrite 規(guī)則:規(guī)則:if ($host * (.*?).domain$)set $var_wup
30、in_city $1;set $var_wupin 1;if ($host * qita.domain$)set $var_wupin 0;if (!-f $document_root/market/$var_wupin_city/index.htm)set $var_wupin 0;if ($var_wupin 1)rewrite /wu/$ /market/$var_wupin_city/index.htm last;Nginx與金山逍遙與金山逍遙TCSQL的配合的配合一般數(shù)據(jù)庫的緩存類型一般數(shù)據(jù)庫的緩存類型 一般數(shù)據(jù)庫緩存分為四種:一般數(shù)據(jù)庫緩存分為四種: 1、Key/Value單個對象緩存,如單個對象緩存,如Memcached 2、列表緩存,就像論壇里帖子的列表、列表緩存,就像論壇里帖子的列表 3、記錄條數(shù)的緩存,比如一個論壇板塊里、記錄條數(shù)的緩存,比如一個論壇板塊里有多少個帖子,這樣才方便實現(xiàn)分頁。有多少個帖子,這樣才方便實現(xiàn)分頁。 4、復雜一點的、復雜一點的group,sum,count查詢,查詢,比如一個論壇里按點擊數(shù)排名的最比如一個論壇里按點擊數(shù)排名的最HOT的帖的帖子列表。子列表。 第一種比較好實現(xiàn),后面三種比較麻煩。第一種比較好實現(xiàn),后面三種比較麻煩。什么是什么是TCSQL實時列表緩存數(shù)據(jù)庫?實時列表緩存數(shù)據(jù)庫? TCSQL是
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安徽省六安市2023-2024年度滬科版數(shù)學九年級上學期綜合測試卷
- 2024-2030年中國大米行業(yè)營銷戰(zhàn)略與供應情況預測報告
- 2024-2030年中國垃圾中轉設備行業(yè)發(fā)展分析及投資戰(zhàn)略研究報告版
- 2024-2030年中國商業(yè)地產行業(yè)發(fā)展前景預測及投融資策略分析報告
- 2024-2030年中國衛(wèi)浴墊產業(yè)未來發(fā)展趨勢及投資策略分析報告
- 2024年版:呂桃與配偶解除婚姻關系協(xié)議
- 2024年施工安全協(xié)議書編制指南及審查標準2篇
- 2024年版離婚合同規(guī)范格式版B版
- 2024年個人信用評估與貸款審核委托協(xié)議3篇
- 2024年版:市場推廣專員合同3篇
- 老年糖尿病患者的血糖管理-PPT
- 安全閥使用說明書
- 最美的化學反應(2018陜西中考記敘文閱讀試題含答案)
- 公司車輛加油費用控制方案
- 2023春人文英語3綜合練習Comprehensive Test題庫及答案匯總
- 在線學習的優(yōu)點和缺點英語作文
- 身份證籍貫自動對照自動生成
- 辦公樓安全風險管控(辦公樓)
- qingming scroll《清明上河圖新解》英文PPT
- 中國鋁業(yè)股份有限公司鞏義智恩鋁土礦礦產資源開采與生態(tài)修復方案
- 消殺除四害工作記錄表
評論
0/150
提交評論