快速上手

概述

OpenResty Edge 使用 admin + node 的架構,對外承載服務的是 node,所有的配置管理都在 admin 上完成。

管理 node

新安裝好的 node 會出現在「閘道器叢集」下方的「候選節點」列表,我們可以選擇批准加入某個叢集。 一般來說,叢集是按照地域來區分的,同一個機房的 node 節點會放到同一個叢集。

新建應用

Edge 部署好了之後,我們可以開始建立應用。 比如我們新建一個包含 foo.test.com 應用,用這個域名去訪問 node 的所有行為,都可以在這個應用裡配置。

新建的應用沒有任何配置,所有訪問都會得到 404。

比如

# 假設 node 的 IP 是 47.56.103.89
$ curl -x 47.56.103.89:80 http://foo.test.com/
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>openresty</center>
</body>
</html>

體驗 hello world

應用內的主要配置都在「頁面規則」裡,比如我們可以用 Edge 語言快速實現 hello world。

我們在「此頁面開始時的定製 Edge 語言規則」下面的編輯框裡輸入:

uri("/hello") =>
    say("hello world!");

點選儲存之後,右上角會出現「你有 1 個未釋出變更 待發布」,這是保險起見,應用內的配置變更並不會立即生效,需要我們確認釋出之後,才會真實的在 node 上生效。

我們順著「待發布」連結,進入釋出頁面,點選發布,很快(可能肉眼看不到變化)我們可以看到同步狀態又回到 100%,意味著新的配置已經同步到 node 生效了。

此時我們可以再來請求一次 node,我們將得到 hello world! 的輸出:

# 假設 node 的 IP 是 47.56.103.89
$ curl -x 47.56.103.89:80 http://foo.test.com/hello
hello world!

關於 Edge 語言的更多細節,請檢視 Edgelang 使用者手冊

反向代理到源站

反向代理是 Edge 最基本的功能,比如我們可以配置如下規則:

  1. 點選頁面右上方的「新規則」
  2. 點開「啟用條件」
  3. URI 字首匹配 字串 /api/
  4. 點開「代理」
  5. 選擇代理到上游,因為我們還沒有上游配置,所以需要選擇「新上游…」,開始新建上游
  6. 輸入上游的名字:api-server,主機名:47.91.165.147,點選儲存,一個新的上游就配置好了
  7. 此時已經自動回到新建規則的介面,點選「建立」

===»>

===»>

此時一個簡單的反向代理規則就建立好了,同樣的,釋出之後即可生效。

這個規則意味著,以 /api/ 為字首的請求,將透過 HTTP 協議回源到 47.91.165.14780 埠,我們可以驗證一下:

$ curl -x 47.56.103.89:80 http://foo.test.com/api/xx
recevied URI: /api/xx
request from IP: 47.56.103.89
server IP: 47.91.165.147

備註:47.91.165.147 是我們為 demo 建立的一個源站。

啟用 cache

預設不會啟用 cache,請求會直接轉發到源站,然後再把源站的響應返回給請求方。 如果需要 cache,我們可以如下配置:

  1. 點編輯(上一步建立的規則)
  2. 點開快取,預設使用 URI + 查詢字串 當做快取鍵,我們可以不做改動,其餘也保持預設值
  3. 點選儲存

同樣的,釋出的即可生效,我們再來測試一下:

# 第一次請求,注意 Cache-Status 為 MISS
$ curl -x 47.56.103.89:80 http://foo.test.com/api/foo -I
HTTP/1.1 200 OK
Server: openresty+
Date: Mon, 05 Aug 2019 10:04:28 GMT
Content-Type: text/plain
Connection: keep-alive
Req-ID: 0000090001ac17f42960e470
Expires: Mon, 05 Aug 2019 11:04:28 GMT
Cache-Control: max-age=3600
Cache-Status: MISS

# 第二次請求,注意 Cache-Status 為 HIT
$ curl -x 47.56.103.89:80 http://foo.test.com/api/foo -I
HTTP/1.1 200 OK
Server: openresty+
Date: Mon, 05 Aug 2019 10:04:30 GMT
Content-Type: text/plain
Connection: keep-alive
Req-ID: 0000090001ac17f42960e470
Expires: Mon, 05 Aug 2019 11:04:28 GMT
Cache-Control: max-age=3600
Edge-Cache-Age: 2
Cache-Status: HIT

是的,第二個請求已經命中了 Cache,不需要回源了,node 直接用快取響應了。

開啟 WAF

如果希望在閘道器 node 上開啟應用防火牆,防禦 SQL 注入、XSS 跨站指令碼、Web 伺服器漏洞、木馬等攻擊,可以這樣配置:

  1. 點編輯(同上)
  2. 點開 WAF,預設會開啟內建的 5 個規則集
  3. 攔截動作預設是「僅記錄日誌」,意味著如果發現有威脅的請求只會記錄下來,不會真的攔截,這個比較適合除錯階段。
  4. 點選儲存

同樣的,釋出之後,我們再來測試一下

$ curl -x 47.56.103.89:80 http://foo.test.com/api/root.exe
recevied URI: /api/root.exe
request from IP: 47.56.103.89
server IP: 47.91.165.147

看起來沒有異常發生,我們再點開左側的“WAF 日誌”,可以看到一條可疑請求記錄,其中原因為命中了關鍵詞 root.exe。

如上只是使用了我們內建的幾個規則集,Edge 還可以很方便的新增自定義規則集,請看更多相關文件

更多配置

如上我們已經完成了基本的體驗,如果還需要更多的配置,比如限速,設定回源的請求頭,設定響應頭,自定義錯誤頁 等等,可以從規則的「動作部分」選擇對應的動作,比如:

也可以參考相關的文件

多個規則

目前為止,這個測試應用只配置一個規則,也即只定義了以 /api/ 為字首的請求的行為。 同一個應用(域名)的不同請求方式,會有不同的行為,也是很常見的,此時我們需要為不同的請求方式,設定不同的行為,比如回源的上游,cache 策略,WAF 策略等等,很自然的,我們可以新建規則來完成配置。

當有多個規則時,規則的條件部分有重疊會怎麼辦呢? 不用擔心,很簡單,只有一個原則: 頁面上的顯示順序,即是規則的執行順序,總是從上面的規則開始往下執行。 如果命中的規則開啟了「跳過當前頁餘下規則」,則不會繼續執行餘下的規則。

在規則列表裡也可以清晰的看到:

配置 SSL 證書

以上體驗都是用的 HTTP,如果要透過 HTTPS 訪問,我們需要配置 SSL 證書。 我們點選左側欄的“SSL”,一共有三種方式來配置證書,我們來體驗下最簡單的情況(手動上傳證書)

  1. 點選右上角「新證書」
  2. 選擇「手動上傳」
  3. 選擇證書和私鑰,可以選擇本地檔案,也可以直接複製輸入證書/私鑰的內容
  4. 儲存

同樣的,釋出之後,我們再來測試一下

$ curl --resolve "foo.test.com:443:47.56.103.89" https://foo.test.com/hello
hello world!

另外還有兩種配置證書的方式,

  1. 透過 Edge 內部整合的 Let’s Encrypt 來自動簽發證書
  2. 直接使用已經在全域性配置裡上傳過的全域性證書,這個適合某些泛域名證書可以跨應用共享的場景

請移步更多相關的文件

探索更多功能

至此我們已經體驗了最基本的配置,Edge 裡還有更多的基礎常用功能,比如錯誤日誌,指標統計,快取重新整理,許可權控制等等,也還有更多的高階功能,比如適用於跨全球網路的「多層網路」回源,自定義動態指標統計,配置回滾等等,可以慢慢體驗,有問題可以檢視文件,或者直接與我們聯絡。

歡迎掃下方二維碼,關注「OpenResty 軟體」,期待您與我們聯絡。