天天看點

nginx反代之前端排程

  前言

    正如大家所知nginx可以作為web伺服器,提供web服務,也可使用其子產品進行前端排程,實作負載均衡的功能,在此我們來叙說其前端排程功能。

    一、常用子產品說明 

    ngx_http_proxy_module(負載均衡,反代子產品)

    1.proxy_pass URL;    #反代及其輸出其路徑 

    示例:location / {

        proxy_pass http://192.168.184.129:80;    

    }

 location /bbs/ {

        proxy_pass http://192.168.184.129:80;

   }

        proxy_pass http://192.168.184.129:80/;

location ~|~* PATTERN {

    注意:proxy_pass後面的路徑不帶uri時,其會将location的uri傳遞給後端主機,在uri後加上斜杠時,則将是/下的檔案請求為其站點目錄。如果location定義其uri時使用正規表達式的模式,則proxy_pass之後必須不能使用uri,否則為文法錯誤。

   2. proxy_set_header    fileld    value; #設定發往後端主機請求封包的首部資訊

    示例:proxy_set header X-REAL-IP $remote_addr;  

    3.proxy_cache_path    #定義代理緩存路徑 

    proxy_cache zone #調用的緩存名稱; 

    proxy_cache_key string; #調用的緩存鍵值; 

    proxy_cache_vaild time; #各種響應碼的緩存時長;

    示例:

    proxy_cache proxycache; 

    proxy_cache_key $request_uri

    proxy_cache_vaild 200 302 10m;

    proxy_cache_valid 301 1h;

    proxy_cache_valid any 1m; 

    ngx_http_upstream_module:(upstream子產品) 

    upstream子產品用來定義一個server組的反代子產品,主要是由proxy_pass,fastcgi_pass,uwsgi_pass....組成。

    1.upstream name {...}  #定義一個服務端組,隻能在http上下文中定義

        upstream webserver 

    2.server address #後端主機IP位址 

    參數:

        ①weight=number #權重,預設為1,

        ②max_fails=number #失敗的嘗試最大次數

        ③fail_timeout=time #伺服器不可以逾時時間

        ④backup #把伺服器當做備用狀态,可使用為sorry server

        ⑤down #标記為不可用狀态

    upstream dynamic {

        zone upstream_dynamic 64k;

        server backend1.example.com      weight=5;

        server backend2.example.com:8080 fail_timeout=5s slow_start=30s;

        server 192.0.2.1                 max_fails=3;

        server backend3.example.com      resolve;

        server backend4.example.com      service=http resolve;

        server backup1.example.com:8080  backup;

        server backup2.example.com:8080  backup;

    3.least_conn; #最少連接配接算法,當server權重不相同是為wlc即權重最少連接配接

    4.ip_hash;    #源位址哈希,能将來自于相同ip位址的主機發往同一個後端real server。 

    5.hash key [consistent]; #基于指定的key的hash表實作請求排程。     

        hash $request_uri;

        hash $remote_addr;

        hash $cookie_name; 

    6.keepalive_connectons: #可使用的保持連接配接的連接配接數   

    7.health_check [parameters];

        定義對後端主機的健康狀态進行檢測機制,隻能用于location上下文;

    可用參數:

        ①interval=time #檢測頻率,預設為5秒

        ②fails=number #判斷伺服器狀态轉為失敗需要檢測的次數

        ③passes=number #判斷伺服器狀态轉為成功需要檢測的次數

        ④uri=uri #判斷其健康與否是使用的uri

        ⑤match #基于指定的match來衡量檢測結構的成敗

    ngx_stream_core_module:

    1.listen address:port [ssl] [udp] [backlog=number] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];

監聽的端口;

預設為tcp協定;

udp: 監聽udp協定的端口;

    執行個體:

    steam {

        upstream webserver {

            server 192.168.184.130:22;

            server 192.168.184.132:22;

            hash $request_uri;

    server {

        listen    10.1.100.1:2203;

        proxy_pass webserver;

    實驗環境極其步驟:

    1、實驗環境:一台前端排程器,兩台後端真實主機,其ip位址分别為:

     排程器:10.1.10.1

    real_server1:192.168.184.130

    real_server2:192.168.184.132

    2、在排程器上配置反代proxy_pass,如下拓撲圖:

<a href="http://s4.51cto.com/wyfs02/M01/89/72/wKioL1gTZzjTfNQdAACEpH56CXw894.png" target="_blank"></a>

<b>實驗截圖:</b>

<b>實驗結果:</b>

<b>注意設定記憶體緩存時需要在http子產品寫入代理緩存路徑:proxy_cache_path如: proxy_cache_path /var/cache/nginx/proxy levels=2:1:2 keys_zone=proxycache:10m max_size=1g;同時proxy_pass也同樣支援正規表達式模式比對。</b>

upstream子產品:

<a href="http://s3.51cto.com/wyfs02/M02/89/74/wKioL1gUFNLBaJkNAAA3-iVIyWo934.png" target="_blank"></a>

<b>注意:此子產品定義時需在location中調用才能生效:proxy_pass http://webserver;</b>

<b>實驗結果圖:</b>

<a href="http://s5.51cto.com/wyfs02/M00/89/74/wKioL1gUFfjRKHz2AAAuSf8aX1Y748.png" target="_blank"></a>

stream_module:

<a href="http://s3.51cto.com/wyfs02/M02/89/77/wKiom1gUFrLSClwcAAAt1243xpY765.png" target="_blank"></a>

    上訴則為nginx的反代子產品,如需清晰的掌握需結合實際的應用程式加以測試,如搭建WordPress等應用程式測試是否能實作前端排程功能。

本文轉自chengong1013 51CTO部落格,原文連結:http://blog.51cto.com/purify/1867063,如需轉載請自行聯系原作者

繼續閱讀