亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Nginx如何實現灰度發布

發布時間:2021-05-21 14:13:47 來源:億速云 閱讀:433 作者:小新 欄目:服務器

這篇文章給大家分享的是有關Nginx如何實現灰度發布的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

Nginx 實現灰度發布的三種方法總結

灰度發布的主要原理是訪問路由的控制,重點是保證每次訪問的是同一個節點。

方式一:通過調節負載均衡權重

        負載均衡 建立在現有網絡結構之上,它提供了一種廉價有效透明的方法擴展網絡設備和服務器的帶寬、增加吞吐量、加強網絡數據處理能力、提高網絡的靈活性和可用性。

        負載均衡,英文名稱為Load Balance,其意思就是分攤到多個操作單元上進行執行,例如Web服務器、FTP服務器、企業關鍵應用服務器和其它關鍵任務服務器等,從而共同完成工作任務。

Nginx如何實現灰度發布

簡單配置如下:

http { 
  upstream cluster { 
    ip_hash; #如果你的系統中沒有使用第三方緩存管理工具 ,建議使用此方式
    server 192.168.1.210:80 weight=5; 
    server 192.168.1.211:80 weight=3; 
    server 192.168.1.212:80 weight=1; 
  } 
  
  server { 
    listen 80; 
 
  location / { 
  
  proxy_next_upstream   error timeout;
  proxy_redirect     off;
  proxy_set_header    Host $host;
  #proxy_set_header    X-Real-IP $remote_addr;
  proxy_set_header    X-Real-IP $http_x_forwarded_for;
  proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
  client_max_body_size  100m;
  client_body_buffer_size 256k;
  proxy_connect_timeout  180;
  proxy_send_timeout   180;
  proxy_read_timeout   180;
  proxy_buffer_size    8k;
  proxy_buffers      8 64k;
  proxy_busy_buffers_size 128k;
  proxy_temp_file_write_size 128k;
  proxy_pass http://cluster; 
    } 
  } 
}

這種方式灰度發布通過weight來實現,但是這種方式只適合修改節點的行為,而且要求應用都是一模一樣的,其實質作用是,節點增加或刪除之后,對負載能力的調節,最終目的是為了讓流量最終保持均衡。

方式二.使用nginx+lua實現web項目的灰度發布

location / {
 content_by_lua '
      myIP = ngx.req.get_headers()["X-Real-IP"]
      if myIP == nil then
        myIP = ngx.req.get_headers()["x_forwarded_for"]
      end
      if myIP == nil then
        myIP = ngx.var.remote_addr
      end
      if myIP == "公司出口IP" then
        ngx.exec("@client")
      else
        ngx.exec("@client_test")
      end
    ';
} 

location @client{
  proxy_next_upstream   error timeout;
  proxy_redirect     off;
  proxy_set_header    Host $host;
  #proxy_set_header    X-Real-IP $remote_addr;
  proxy_set_header    X-Real-IP $http_x_forwarded_for;
  proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
  client_max_body_size  100m;
  client_body_buffer_size 256k;
  proxy_connect_timeout  180;
  proxy_send_timeout   180;
  proxy_read_timeout   180;
  proxy_buffer_size    8k;
  proxy_buffers      8 64k;
  proxy_busy_buffers_size 128k;
  proxy_temp_file_write_size 128k;
  proxy_pass http://client;

}
location @client_test{
  proxy_next_upstream   error timeout;
  proxy_redirect     off;
  proxy_set_header    Host $host;
  #proxy_set_header    X-Real-IP $remote_addr;
  proxy_set_header    X-Real-IP $http_x_forwarded_for;
  proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
  client_max_body_size  100m;
  client_body_buffer_size 256k;
  proxy_connect_timeout  180;
  proxy_send_timeout   180;
  proxy_read_timeout   180;
  proxy_buffer_size    8k;
  proxy_buffers      8 64k;
  proxy_busy_buffers_size 128k;
  proxy_temp_file_write_size 128k;
  proxy_pass http://client_test;
}

由于使用了nginx+lua模塊,這種方式適合很多場景,非常強大,但是問題是你可能需要學習很多lua的語法。

 方式三.使用http頭信息判斷+權重(灰度值)

http請求傳輸過程中,會自動帶上User-Agent,Host,Referer,Cookie等信息。我們只需要判斷ip地址段,用戶代理,Cookie中的信息等。我們這里以Cookie為例。

當然,這里需要解決兩個問題:

①首次訪問靜態頁面可能不會產生cookie

②我們需要通過代碼動態設置路由

③通過weight控制灰度值

我們可以通過一個例子來解決上述中的②與③的問題

upstream tts_V6 {
    server 192.168.3.81:5280 max_fails=1 fail_timeout=60;
}
upstream tts_V7 {
    server 192.168.3.81:5380 max_fails=1 fail_timeout=60;
}
upstream default {  #通過upstream default + weight節點控制權重
    server 192.168.3.81:5280 max_fails=1 fail_timeout=60 weight=5;
    server 192.168.3.81:5380 max_fails=1 fail_timeout=60 weight=1;
}
server {
    listen 80;
    server_name test.taotaosou.com;
    access_log logs/test.taotaosou.com.log main buffer=32k;
    #match cookie
    set $group "default";
    if ($http_cookie ~* "tts_version_id=tts1"){ #動態控制路由
        set $group tts_V6;
    }
    if ($http_cookie ~* "tts_version_id=tts2"){
        set $group tts_V7;
    }
    location / {            
        proxy_pass http://$group;
        proxy_set_header  Host       $host;
        proxy_set_header  X-Real-IP    $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        index index.html index.htm;
    }
 }

對于問題①,我們可以在index頁面通過script來訪問動態頁面:

<script src="https://test.taotaosou.com/cookieinfo.php" /><script>

此外,我們還要在cookieinfo.php中判斷和生成cookie

<?php

if(!session_id())
{
 session_start();
}
if(!isset($_COOKIE["tts_version_id"]))
{
 $cookieValue = $_SERVER['SERVER_PORT']==5280?"tts1":"tts2";
 setcookie("tts_version_id", $cookieValue, time()+3600, "/");
}
?>

感謝各位的閱讀!關于“Nginx如何實現灰度發布”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永修县| 清河县| 安徽省| 绥德县| 大名县| 酒泉市| 乡城县| 巢湖市| 车险| 台山市| 政和县| 浮山县| 景泰县| 西宁市| 滨州市| 南木林县| 曲麻莱县| 延津县| 韶关市| 大邑县| 扎囊县| 司法| 绿春县| 延安市| 永靖县| 杭锦后旗| 七台河市| 清丰县| 沙河市| 古浪县| 祁东县| 林甸县| 焉耆| 嵩明县| 南乐县| 新巴尔虎右旗| 五寨县| 甘谷县| 武夷山市| 定结县| 西乌珠穆沁旗|