小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Nginx(三):反向代理負載均衡集群配置詳解

 笑觀云卷云舒 2017-10-14

概述:

    本篇主要總結Nginx實現(xiàn)反向代理和負載均衡功能相關模塊的配置說明。主要使用到的模塊如下:

ngx_http_proxy_module

Nginx實現(xiàn)反向代理功能

ngx_http_upstream_module

Nginx反向代理時實現(xiàn)負載均衡、會話保持等功能

一、Nginxhttp/https協(xié)議反向代理(ngx_http_proxy_module)

  1.反向代理

        反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然后將請求轉發(fā)給內部網(wǎng)絡上的服務器,并將從服務器上得到的結果返回給internet上請求連接的客戶端,此時站在服務器角度來看,代理服務器對外就表現(xiàn)為一個反向代理服務器。

        對反向代理服務器的攻擊并不會使得后端內網(wǎng)Web服務器上網(wǎng)頁信息遭到破壞,增強了Web服務器的安全性。

 

  2.ngx_http_proxy_module配置

    (1) proxy_pass URL;  定義反向代理到的路徑

   適用范圍:location, if in location, limit_except上下文中;URL為完整的路徑

注意:

   匹配location后傳遞給后端請求路徑情況解析( REMOTE-IP:后端主機IP地址)

    1) proxy_pass后面的路徑不帶uri時,其會將location的uri直接傳遞給后端的主機(直接補充關系)

location  /uri/{

proxy_pass http://REMOTE-IP;

}

  此時傳遞給后端的請求路徑為:http://REMOTE-IP/uri/,直接補充在REMOTE-IP之后

   2) proxy_pass后面的路徑是一個uri時,其會將location的uri替換為后端主機自己new_uri(映射關系);

location  /uri/{

proxy_pass http://REMOTE-IP/new_uri/;

}

  此時客戶端請求被location/uri/匹配到,跳轉到后端請求路徑將由/new uri/替換/uri/http://REMOTE-IP/new_uri/

    3) 如果location定義其uri時使用的正則表達式模式匹配,則proxy_pass后的路徑不能夠使用uri;

location ~*  \.(jpg|gif|jpeg)$  {

proxy_pass http://REMOTE-IP;

}

    此處的http://REMOT-IP后面不能有任何uri,"/"也不(/相對路徑,相當于后端的DocumentRoot/root路徑);

    (2) proxy_set_header  field value;

              用于proxy server向后端服務主機發(fā)請求報文時,將某請求首部重新賦值,或在原有值后面添加一個新的值; 也可以添加自定義首部;

示例:

proxy_set_header X-Real-IP  $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

               原有請求報文中如果存在X-Forwared-For首部,則將remote_addr以逗號分隔補原有值后,否則則直接添加此首部;

   (3) 緩存相關的選項(緩存需要要先定義,調用)

proxy_cache_path …

 path [levels=levels]  [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size]

定義緩存可用上下文為http; (fastcgi的緩存定義相似)

proxy_cache  zone | off;

調用緩存;可用上下文 為http,  server和location

proxy_cache_key  string; 

定義緩存鍵,默認值為proxy_cache_key  $scheme$proxy_host$request_uri

proxy_cache_valid  [code ...] time;

對不同響應碼的響應設定其可緩存時長

proxy_cache_use_stale  ...

error | timeout |  invalid_header | updating | http_500 | http_502 | http_503 | http_504 |  http_403 | http_404 | off ...;

超出響應時長時候使用緩存條目來響應(且緩存本身已經超時)

 補充說明:

     Nginx:請求首部設置(ngx_http_headers_module)

add_header name  value [always];

向響應報文添加自定義首部,并為其賦值;

expires [modified]  time;

expires epoch |  max | off;

允許或禁止向響應報文的Cache-Control或Expires首部添加新值或修改其值;

   實例一:add_hader Via $server_addr;    記錄反向代理服務器地址

   實例二:日志追蹤代理記錄IP

第一步:后端主機定義日志記錄格式

Logformat 自定義日志格式,一般自定義變量均為X開頭,i表示取其值:添加 Logformat   "%{X-Real-IP}I … …"

第二步:在方向代理主機:修改http首部,記錄代理轉發(fā)主機的IP地址(慣用自定義變量X-Real-IPX-Forwarded-For)

proxy_cacahe_path/var/cache/nginx_proxy/  levels=1:2key_zone=pcache:10m  max_size=1g;

server {

listen 80;

server_name www.;

root /data/www;

add_hader  Via $server_addr; 

proxy_set_header  X-Real-IP $remote_addr;

location  / {

proxy_pass  http://172.16.200.1;

proxy_cache  pcache;

proxy_cache_key  $request_uri;

proxy_cache_vaild  200 302 10m;

proxy_cache_vaild  404 2m;

}

}

原有請求報文中如果存在X-Forwarded_For首部,則將remte_addr以逗號分割補在原有值之后,否則則直接添加此首部

 proxy_set_header   X-Real_IP $remote_addr;

 proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;

    (4) 連接相關的選項

               當客戶端請求,而后端服務器過于繁忙會返回給客戶端502(BadGateway)服務器端錯誤,在例如此類情況下,肯能需要調整服務器端關于連接時長相關的選項。

 proxy_connect_timeout  #;

定義與后端服務器建立連接的超時時長;默認為60s,不建議超出75s;

 proxy_send_timeout #;

把請求發(fā)送給后端服務器的超時時長(定義兩次請求報文之間時間間隔);默認為60s;

 proxy_read_timeout #;

等待后端服務器發(fā)送響應報文的超時時長;可以稍微長點

 

 

二、Nginx:負載均衡配置(ngx_http_upstream_module)

 1.Nginx實現(xiàn)七層負載均衡

         Nginx實現(xiàn)反向代理的時候可以在后端使用多臺主機提供響應,且可以在多臺主機之間實現(xiàn)負載均衡效果。軟件形式的工作在應用層(七層)的負載均衡器。

        ngx_http_upstream_module用于將多個服務器定義成服務器組,而由proxy_passfastcgi_pass、uwsgi_passscgi_passmemcached_pass指令進行引用調度;

 

  2.常用指令

    (1) upstream NAME  { ... }

                定義一個后端服務器組,NAME為組名稱;僅能用于http上下文 ;

    (2) server ADDRESS  [PARAMETERS];

在upstream中定義一個服務器及其相關參數(shù);僅能用于upstream上下文;

     常用參數(shù)(PARAMETERS):

weight=#

定義服務器權重,默認為1

max_fails=#

最大失敗連接嘗試次數(shù),失敗連接超時時長由fail_timeout參數(shù)指定

fail_timeout=#

等待目標服務器發(fā)送響應的時長

backup

備用服務器,所有主服務器均故障時才啟用此主機

down

手動標記其不再處理任何用戶請求

    實例:

第一步:在http上下文中定義upstream服務器組

upstream websrvs {

server 172.16.200.1 weight=2 max_fails=2 fail_timeout=6s;

server 172.16.200.2  weight=1 max_fails=2fail_timeout=6s;

}                                

第二步:在反向代理http中(proxy_pass,fastcgi_pass, ...)進行調用;

server {

listen 80;

server_name  www.;

root /data/www;

location  / {

proxy_pass http://websrvs/;

}

}

    (3) ip_hash;

 源地址hash,把來自同一個ip地址的請求始終發(fā)往同一個backendserver,除非此backend server不可用;

    (4) least_conn;

最少連接;當各server權重不同時,即為加權最少連接;

    (5) match NAME  { ... }

對backendserver做健康狀態(tài)檢測時,定義其結果判斷機制;只能用于http上下文;

     常用的參數(shù):

status  code[   code ...]:

期望的響應狀態(tài)碼;

header  HEADER[operator  value]

期望存在響應首部,也可對期望的響應首部的值基于比較操作符和值進行比較;

body

期望響應報文的主體部分應該有的內容;

    (6) health_check   [PARAMETERS];

健康狀態(tài)檢測機制;只能用于location上下文;

      常用參數(shù):

interval=#

檢測的頻率,默認為5秒;

fails=#

判定服務器不可用的失敗檢測次數(shù);默認為1次;

passes=#

判定服務器可用的失敗檢測次數(shù);默認為1次;

uri=uri

做健康狀態(tài)檢測測試的目標uri;默認為/;

match=NAME

健康狀態(tài)檢測的結果評估調用此處指定的match配置塊;

    (7) hash key [consistent];

指明基于hash方式進行調度時,其hashkey;

hash  $remote_addr相當于ip_hash;

常用的hash key:

    1) $cookie_name:

                       將一個用戶的請求始終發(fā)往同一個backendserver,能實現(xiàn)會話綁定的功能;此處的name為cookie某些參數(shù)的名稱,此處常用的有cookie_username;

    2) $request_uri:

            將對同一個uri的請求始終發(fā)往同一個backend server,后端為cache server時特別有用;

補充說明:session會話保持方式

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多