㈠ 使用Nginx 簡單實現灰度發布
灰度發布是指在黑與白之間, 能夠平滑過渡的一種發布方式. AB test就是一種灰度發布試. 讓一部分用戶繼續使用A, 一部分用戶開始使用B, 如果用戶對B沒有什麼反對意見, 那麼逐步擴大范圍, 把所有用戶都遷移到B上面來.
灰度發布可以保證整體系統的穩定, 在初始灰度的時候就可以發現,調整問題, 以保證其影響度.
灰度發布常見一般有三種方式:
本文主要講解 根據Cookie和來路IP這兩種方式來實現簡單的灰度發布, Nginx+LUA 這種方式涉及內容太多就不再本文展開了.
根據 Cookie 查詢 Cookie 鍵為 version 的值, 如果該 Cookie 值為 V1 , 則轉發到 hilinux_01 , 為 V2 則轉發到 hilinux_02 , Cookie 的值都不匹配的情況下, 默認走 hilinux_01 所對應的伺服器.
兩個伺服器分別定義為:
在Nginx裡面配置一個映射, $COOKIE_version 可以解陵悔析出 Cookie 裡面的version欄位, $group 是一個變數, {}裡面是映射規則.
如果一個 version 為 V1 的用戶來訪問, $group 就等於 hilinux_01 。在 server 裡面使用就會代鄭汪襲理到 http://hilinux_01 上。 version 為 V2 的用戶來訪問, $group 就等於 hilinux_02 。在 server 裡面使用就會代理到 http://hilinux_02 上。 Cookie 值都不匹配的情況下默認走 hilinux_01 所對應的伺服器。
如果是內部IP,則反向代理到hilinux_02(預發布環境);如果不是則反向代理到hilinux_01(生產環境)。
如果你只有單台伺服器,可以根據不同的IP設置不喊兄同的網站根目錄來達到相同的目的。
到此最基本的實現灰度發布方法就講解完了,如果要做更細粒度灰度發布可參考ABTestingGateway項目。
㈡ 使用Nginx搭建靜態網站
開始建站了,暫時還沒想要做些什麼東西。
Anyway,先搞個雲伺服器吧,那要怎麼搭建呢?先來個最簡單的。
Nginx 配置文件目錄一般在 /etc/nginx/ 下,打開 nginx.conf 文件可以看到配置:
當外網用戶訪問伺服器 Web 服務由 Nginx 提供,Nginx 需要配置靜態資源的路徑信息才能通過 URL 正確訪問到伺服器上的靜態資源。
當我們在伺服器上安裝並啟動 Nginx 之後,就可宏枝以通過 http://<域名或IP> 訪問我們的網頁了。所以,在瀏覽器中輸入 http://100.2.3.4 即可。
我們觀察到瀏覽器的地址變成了 http://100.2.3.4/index.html ,這頁面是安裝 Nginx 的默認站點,可以在 /usr/share/nginx/html 目錄下找到。在 nginx.conf 配置文件中,有一項 root /usr/share/nginx/html 的配置,意思是當外網訪問伺服器 跟目錄 時,Nginx 會將資源指向 /usr/share/nginx/html 的站點。
但如果輸入地址,無法打開(如下截圖)。
以阿里雲為例,需要在雲伺服器添加 「安全組規則」 ,添加並保存,重新刷新頁面就能打開了。
我習慣將前端靜態資源滾絕兄放置到伺服器的 /data/www 下,因此將配置修改為 root /data/www 。此時訪問 http://100.2.3.4 會指向 /data/www/index.html (在不配置 location 的 index 情況下,Nginx 默認配置是 index.html )。
由於我使用的是 Mac 機器,因此可以直接在系統終端使用 scp 命令將本地文件上傳到雲伺服器。
scp (secure )用於在 Linux 下進行遠程拷貝文件的命令。大襲類似於 cp ,只不過 cp 只能在本機進行拷貝,不能跨伺服器。 -r 表示遞歸復制整個目錄。
需要注意一下,下面兩種的區別:
其中 1️⃣ 得到的是 /data/www/dist ,而 2️⃣ 得到的是 /data/www 。前者表示將 dist 整個目錄拷貝至 /data/www 下。後者是把 dist 目錄下的所有子文件和子目錄都拷貝至 /data/www 。
換句話說就是,前者配置 root 的路徑應該是 /data/www/dist ,後者則為 /data/www 。
效果如下:
在瀏覽器中訪問 http://100.2.3.4 即可看到我們配置的網頁了。
最簡單的 Nginx 部署靜態網頁就完了,其他的下次再講...
The end.