大數(shù)據(jù)高并發(fā)架構(gòu)實戰(zhàn)案例-資源第八講nginx進(jìn)階_第1頁
大數(shù)據(jù)高并發(fā)架構(gòu)實戰(zhàn)案例-資源第八講nginx進(jìn)階_第2頁
大數(shù)據(jù)高并發(fā)架構(gòu)實戰(zhàn)案例-資源第八講nginx進(jìn)階_第3頁
大數(shù)據(jù)高并發(fā)架構(gòu)實戰(zhàn)案例-資源第八講nginx進(jìn)階_第4頁
大數(shù)據(jù)高并發(fā)架構(gòu)實戰(zhàn)案例-資源第八講nginx進(jìn)階_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、北風(fēng)網(wǎng)項目培訓(xùn) 講師:tom5(北風(fēng)網(wǎng) ) 第八講Nginx實戰(zhàn)進(jìn)階 Nginx調(diào)度策略nginx的upstream目前支持4種方式的分配1、輪詢(默認(rèn))每個請求按時間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器down掉,能自動剔除。2、weight指定輪詢幾率,weight和訪問比率成正比,用于后端服務(wù)器性能不均的情況。例如: upstream bakend server 4 weight=10; server 5 weight=10; Nginx調(diào)度策略3、ip_hash每個請求按訪問ip的hash結(jié)果分配,這樣每個訪客固定訪問一個后端服務(wù)器,可以解決session的問題。例如: up

2、stream bakend ip_hash; server 4:88; server 5:80; 4、fair(第三方)按后端服務(wù)器的響應(yīng)時間來分配請求,響應(yīng)時間短的優(yōu)先分配。upstream backend server server1; server server2; fair; Nginx調(diào)度策略5、url_hash(第三方)按訪問url的hash結(jié)果來分配請求,使每個url定向到同一個后端服務(wù)器,后端服務(wù)器為緩存時比較有效。例:在upstream中加入hash語句,server語句中不能寫入weight等其他的參數(shù),hash_method是使用的hash算法upstream backe

3、nd server squid1:3128; server squid2:3128; hash $request_uri; hash_method crc32; Nginx調(diào)度策略-小技巧upstream bakend#定義負(fù)載均衡設(shè)備的Ip及設(shè)備狀態(tài)ip_hash; server :9090 down; server :8080 weight=2; server :6060; server :7070 backup;在需要使用負(fù)載均衡的server中增加proxy_pass ;小技巧參數(shù)說明為:1.down 表示當(dāng)前的server暫時不參與負(fù)載2.weight 默認(rèn)為1.weight越大,負(fù)

4、載的權(quán)重就越大。 Nginx調(diào)度策略-小技巧3.max_fails :允許請求失敗的次數(shù)默認(rèn)為1.當(dāng)超過最大次數(shù)時,返回proxy_next_upstream 模塊定義的錯誤4.fail_timeout:max_fails次失敗后,暫停的時間。5.backup: 其它所有的非backup機器down或者忙的時候,請求backup機器。所以這臺機器壓力會最輕。nginx支持同時設(shè)置多組的負(fù)載均衡,用來給不用的server來使用。client_body_in_file_only 設(shè)置為On 可以講client post過來的數(shù)據(jù)記錄到文件中用來做debugclient_body_temp_path

5、 設(shè)置記錄文件的目錄 可以設(shè)置最多3層目錄location 對URL進(jìn)行匹配.可以進(jìn)行重定向或者進(jìn)行新的代理 負(fù)載均衡proxy_pass后的url加不加/的區(qū)別下面四種情況分別用 進(jìn)行訪問。第一種:location /css/ proxy_pass ;會被代理到 這個url第二種(相對于第一種,最后少一個 /)location /css/ proxy_pass ;會被代理到 這個url第三種:location /css/ proxy_pass js/;會被代理到 這個xy_pass后的url加不加/的區(qū)別第四種情況(相對于第三種,最后少一個 / ):location /css/

6、 proxy_pass ;會被代理到 這個url帶“/”就會把 替換掉Nginx對URL進(jìn)行匹配語法規(guī)則: location =|*| /uri/ = 開頭表示精確匹配 開頭表示uri以某個常規(guī)字符串開頭,理解為匹配 url路徑即可。nginx不對url做編碼,因此請求為/static/20%/aa,可以被規(guī)則 /static/ /aa匹配到(注意是空格)。 開頭表示區(qū)分大小寫的正則匹配* 開頭表示不區(qū)分大小寫的正則匹配!和!*分別為區(qū)分大小寫不匹配及不區(qū)分大小寫不匹配 的正則/ 通用匹配,任何請求都會匹配到。多個location配置的情況下匹配順序為:首先匹配 =,其次匹配, 其次是按文件中

7、順序的正則匹配,最后是交給 / 通用匹配。當(dāng)有匹配成功時候,停止匹配,按當(dāng)前匹配規(guī)則處理請求?!?”符號表示URL結(jié)尾Nginx對URL進(jìn)行匹配例子,有如下匹配規(guī)則例子:location = / #規(guī)則A proxy_pass ;location = /login #規(guī)則B proxy_pass ;location /static/ #規(guī)則C root /usr/share/nginx/html; index index.html index.htm;location .(gif|jpg|png|js|css)$ #規(guī)則D root /usr/share/nginx/html;Nginx對UR

8、L進(jìn)行匹配location * .png$ #規(guī)則E proxy_pass ;location .shtml$ #規(guī)則F root /usr/share/nginx/html; if (!-e $request_filename) proxy_pass ; location *.shtml$ #規(guī)則G root /usr/share/nginx/html; if (!-e $request_filename) proxy_pass ; location / #規(guī)則H proxy_pass ;Nginx對URL進(jìn)行匹配訪問根目錄/, 比如 將匹配規(guī)則A訪問 login將匹配規(guī)則B, regist

9、er則匹配規(guī)則H訪問 static/a.html將匹配規(guī)則C訪問 a.gif, b.jpg將匹配規(guī)則D和規(guī)則E,但是規(guī)則D順序優(yōu)先,規(guī)則E不起作用, 而 static/c.png則優(yōu)先匹配到 規(guī)則C訪問 a.PNG則匹配規(guī)則E, 而不會匹配規(guī)則D,因為規(guī)則E不區(qū)分大小寫。訪問 a.shtml不會匹配規(guī)則F和規(guī)則G, a.SHTML不會匹配規(guī)則G,因為不區(qū)分大小寫。規(guī)則F,規(guī)則G屬于排除法,符合匹配規(guī)則但是不會匹配到,所以想想看實際應(yīng)用中哪里會用到。訪問 category/id/1111則最終匹配到規(guī)則H,因為以上規(guī)則都不匹配,這個時候應(yīng)該是nginx轉(zhuǎn)發(fā)請求給后端應(yīng)用服務(wù)器,比如FastCGI

10、(php),tomcat(jsp),nginx作為方向代理服務(wù)器存在。Nginx對URL進(jìn)行匹配-常用所以實際使用中,至少有三個匹配規(guī)則定義常用,如下:直接匹配網(wǎng)站根,通過域名訪問網(wǎng)站首頁比較頻繁,使用這個會加速處理,官網(wǎng)如是說。這里是直接轉(zhuǎn)發(fā)給后端應(yīng)用服務(wù)器了,也可以是一個靜態(tài)首頁# 第一個必選規(guī)則location = / proxy_pass # 第二個必選規(guī)則是處理靜態(tài)文件請求,這是nginx作為http服務(wù)器的強項# 有兩種配置模式,目錄匹配或后綴匹配,任選其一或搭配使用location /static/ root /webroot/static/;location * .(gif|j

11、pg|jpeg|png|css|js|ico)$ root /webroot/res/;Nginx對URL進(jìn)行匹配-常用#第三個規(guī)則就是通用規(guī)則,用來轉(zhuǎn)發(fā)動態(tài)請求到后端應(yīng)用服務(wù)器#非靜態(tài)文件請求就默認(rèn)是動態(tài)請求,自己根據(jù)實際把握#畢竟目前的一些框架的流行,帶.php,.jsp后綴的情況很少了location / proxy_pass Nginx一些可用的全局變量$arg_PARAMETER #這個變量包含GET請求中,如果有變量PARAMETER時的值。$args #這個變量等于請求行中(GET請求)的參數(shù),例如foo=123&bar=blahblah;$binary_remote_addr

12、#二進(jìn)制的客戶地址。$body_bytes_sent #響應(yīng)時送出的body字節(jié)數(shù)數(shù)量。即使連接中斷,這個數(shù)據(jù)也是精確的。$content_length #請求頭中的Content-length字段。$content_type #請求頭中的Content-Type字段。$cookie_COOKIE #cookie COOKIE變量的值$document_root #當(dāng)前請求在root指令中指定的值。$document_uri #與$uri相同。$host #請求主機頭字段,否則為服務(wù)器名稱。Nginx一些可用的全局變量$is_args #如果有$args參數(shù),這個變量等于”?”,否則等于”,空

13、值。$http_user_agent #客戶端agent信息$http_cookie #客戶端cookie信息$limit_rate #這個變量可以限制連接速率。$query_string #與$args相同。$request_body_file #客戶端請求主體信息的臨時文件名。$request_method #客戶端請求的動作,通常為GET或POST。$remote_addr #客戶端的IP地址。$remote_port #客戶端的端口。$remote_user #已經(jīng)經(jīng)過Auth Basic Module驗證的用戶名。$ pletion #如果請求結(jié)束,設(shè)置為OK. 當(dāng)請求未結(jié)束或如果該

14、請求不是請求鏈串的最后一個時,為空(Empty)。Nginx一些可用的全局變量$request_method #GET或POST$request_filename #當(dāng)前請求的文件路徑,由root或alias指令與URI請求生成。$request_uri #包含請求參數(shù)的原始URI,不包含主機名 如:”/foo/bar.php?arg=baz”。不能修改。$scheme #HTTP方法(如http,https)。$server_protocol #請求使用的協(xié)議,通常是HTTP/1.0或HTTP/1.1。$server_addr #服務(wù)器地址,在完成一次系統(tǒng)調(diào)用后可以確定這個值。$server

15、_name #服務(wù)器名稱。$server_port #請求到達(dá)服務(wù)器的端口號。$uri #不帶請求參數(shù)的當(dāng)前URI,$uri不包含主機名,如”/foo/bar.html”。該值有可能和$request_uri 不一致。$request_uri是瀏覽器發(fā)過來的值。該值是rewrite后的值。例如做了internal redirects后。本次實戰(zhàn)案例介紹以 某移動應(yīng)用服務(wù)端架構(gòu) 為例(暫不包括 cdn鏡像,靜態(tài)化,庫表水平及垂直拆分):負(fù)載均衡:采用的LVS靜態(tài)內(nèi)容(圖片)與動態(tài)內(nèi)容服務(wù)器分離:采用的nginx緩存:采用的memcached數(shù)據(jù)隊列:采用的activeMQ數(shù)據(jù)庫集群:采用的Mys

16、ql主從集群NoSql分布式數(shù)據(jù)引擎及MapReduce:采用的hadoop本系列實戰(zhàn)案例系統(tǒng)架構(gòu)圖CSS,圖片,js等靜態(tài)文件Nginx對URL重寫三、ReWrite語法last 基本上都用這個Flag。break 中止Rewirte,不在繼續(xù)匹配redirect 返回臨時重定向的HTTP狀態(tài)302permanent 返回永久重定向的HTTP狀態(tài)3011、下面是可以用來判斷的表達(dá)式:-f和!-f用來判斷是否存在文件-d和!-d用來判斷是否存在目錄-e和!-e用來判斷是否存在文件或目錄-x和!-x用來判斷文件是否可執(zhí)行Nginx對URL重寫2、下面是可以用作判斷的全局變量例: $host:lo

17、calhost$server_port:88$request_uri: $document_uri:/test1/test2/test.php$document_root:D:nginx/html$request_filename:D:nginx/html/test1/test2/test.php四、Redirect語法server listen 80;server_name ;index index.html index.php;root html;if ($http_host ! “$" rewrite (.*) $1 redirect;Nginx對URL重寫七、禁止訪問某個目錄location * .(txt|doc)$root /data/www/wwwroot/linuxtone/test;deny all;點開頭的文件禁止訪問,避免以“點”開頭的文件(例如.htaccess)被其他用戶訪問到locati

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論