快速上手
概述
OpenResty Edge 使用 admin + node 的架構,對外承載服務的是 node,所有的配置管理都在 admin 上完成。
安裝管理 node
如果是免費體驗的 demo 環境,我們已經部署好了 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 最基本的功能,比如我們可以配置如下規則:
- 點選頁面右上方的「新規則」
- 點開「啟用條件」
- URI 字首匹配 字串
/api/
- 點開「代理」
- 選擇代理到上游,因為我們還沒有上游配置,所以需要選擇「新上游…」,開始新建上游
- 輸入上游的名字:
api-server
,主機名:47.91.165.147
,點選儲存,一個新的上游就配置好了 - 此時已經自動回到新建規則的介面,點選「建立」
===»>
===»>
此時一個簡單的反向代理規則就建立好了,同樣的,釋出之後即可生效。
這個規則意味著,以 /api/ 為字首的請求,將透過 HTTP 協議回源到 47.91.165.147
的 80
埠,我們可以驗證一下:
$ 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,我們可以如下配置:
- 點編輯(上一步建立的規則)
- 點開快取,預設使用 URI + 查詢字串 當做快取鍵,我們可以不做改動,其餘也保持預設值
- 點選儲存
同樣的,釋出的即可生效,我們再來測試一下:
# 第一次請求,注意 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 伺服器漏洞、木馬等攻擊,可以這樣配置:
- 點編輯(同上)
- 點開 WAF,預設會開啟內建的 5 個規則集
- 攔截動作預設是「僅記錄日誌」,意味著如果發現有威脅的請求只會記錄下來,不會真的攔截,這個比較適合除錯階段。
- 點選儲存
同樣的,釋出之後,我們再來測試一下
$ 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”,一共有三種方式來配置證書,我們來體驗下最簡單的情況(手動上傳證書)
- 點選右上角「新證書」
- 選擇「手動上傳」
- 選擇證書和私鑰,可以選擇本地檔案,也可以直接複製輸入證書/私鑰的內容
- 儲存
同樣的,釋出之後,我們再來測試一下
$ curl --resolve "foo.test.com:443:47.56.103.89" https://foo.test.com/hello
hello world!
另外還有兩種配置證書的方式,
- 透過 Edge 內部整合的 Let’s Encrypt 來自動簽發證書
- 直接使用已經在全域性配置裡上傳過的全域性證書,這個適合某些泛域名證書可以跨應用共享的場景
請移步更多相關的文件。
探索更多功能
至此我們已經體驗了最基本的配置,Edge 裡還有更多的基礎常用功能,比如錯誤日誌,指標統計,快取重新整理,許可權控制等等,也還有更多的高階功能,比如適用於跨全球網路的「多層網路」回源,自定義動態指標統計,配置回滾等等,可以慢慢體驗,有問題可以檢視文件,或者直接與我們聯絡。
歡迎掃下方二維碼,關注「OpenResty 軟體」,期待您與我們聯絡。