國道高乘載管制是交通部高速公路局為提升國道行車安全與效率而實施的措施,要求車輛乘載人數達到一定標準才能通行......
國道實施高乘載管制路段及時段內,僅下列之車輛可駛入,其餘未於表列之車輛一律禁止進入:
- 乘載3人(含)以上(含駕駛及小孩)之小型車
- 駕駛或乘客持有身心障礙證明之小型車
- 駕駛或乘客持有孕婦證明之小型車(同時出示孕婦健康手冊及附照片身分證明)
-- 節錄自高速公路資訊網。取用日期:2025-09-07
先回到Quick Start中建立的Dashboard服務的Web畫面,在左邊選單上有這麼些選項:Route(路由)、Upstream(上游)、Service(服務)。
要使用APISIX,首先需要先了解這三個概念。特別是路由部分最爲重要。
就像是「什麼是API網關」中介紹的,APISIX最重要的任務,就是決定第7層HTTP網路封包的去留方向。而路由就有點像是在建立檢票口、收費站;也有點像是在設定路牌、命名路名、還有添加交通號誌。
可以這麼想像:現在建立一個新竹地區百貨公司的方向牌。這就是建立一個路由。
那麼有來的封包、有路牌,那也應該要至少有個目的地,甚至可以不止一個目的地。新竹地區的百貨公司並不是只有一家,有新竹巨城、新竹SOGO、新竹大遠百,還有竹北大遠百。如果目的地是要去新竹地區百貨公司,這些目標都在這個集合內。這個目的地集合叫做上游(Upstream),而實際目的地叫做目標(Target)或節點(Node)。(有時候上游可能也就直接指上游節點)
最後,服務(Service)就像是一組可重複用於不同路由的規定,特定路由可能有特定的規則(可透過透過Plugin實現),但有些時候需要的規則其實是相似的,「不要重複造輪子」能夠抽取出來共用最好。就像是當實施國道高乘載管制時,一般不會僅有一個地方實施,而是多個路段一起實施。
先透過Node.js安裝http-server,以建立簡易的靜態網頁伺服器。
npm i -g http-server
建立百貨公司服務目錄:
mkdir 竹北大遠百 新竹大遠百 新竹巨城 新竹SOGO
(圖片修改自原作者:T Gordon Cheng、Rick888chen、Rick888chen)
然後在每個資料夾下建立index.html
,並輸入以下內容,以及調整百貨公司名稱:
<!doctype html>
<html lang="zh-Hant">
<head>
<meta charset="UTF-8"/>
<title>新竹巨城</title>
</head>
<body>
<h1>歡迎來到「新竹巨城」</h1>
</body>
</html>
在每個百貨公司下啓動http-server:
http-server ./
以下開店例子:
百貨公司名稱 | 監聽端口 |
---|---|
新竹巨城 | 8081 |
新竹SOGO | 8082 |
新竹大遠百 | 8083 |
竹北大遠百 | 8084 |
開啓APISIX Dashboard管理介面,在選單找到Upstream,然後建立一個新的上游群集「新竹百貨公司」,並這麼填入:
欄位 | 內容 |
---|---|
Name | 新竹百貨公司 |
Target | Host: 127.0.0.1:8081 |
Host: 127.0.0.1:8082 | |
Host: 127.0.0.1:8083 | |
Host: 127.0.0.1:8084 |
由於之前APISIX是由Docker啓動的容器,因此實際上IP應該要改成本機位置。例如
192.168.56.3
。
然後同樣在APISIX Dashboard管理介面,找到Route設定並建立新路由「新竹百貨公司」。
欄位 | 內容 |
---|---|
Name | 新竹百貨公司 |
Host | xn--55qx5d0y0ax0p39ed04a.com |
Path | /* |
Priority | 大於0的整數。(如果仍保留quick start建立的httpbin路由則需要調整) |
然後在下一步的上游設定,找到「新竹百貨公司」的上游群集完成建立。
在上一步設定的路由中,指定Host爲xn--55qx5d0y0ax0p39ed04a.com
,這是透過punycode編碼的中文域名「新竹百貨公司.com」。這就像是路牌一樣,通常會由DNS伺服器提供這個路牌的詳細資訊,但這次實驗,我們透過修改hosts文件來達成這一目的。在hosts文件添加:
127.0.0.1 xn--55qx5d0y0ax0p39ed04a.com
然後在瀏覽器瀏覽 http://新竹百貨公司.com:9080/ ,你可以重新整理幾次頁面看看,會發現每次都到了不同的新竹百貨公司。
在APISIX Dashboard管理介面,找到Service設定並建立新服務「高乘載管制」。
並在Plugin啓用limit-count
設定:
count: 1
time_window: 60
key_type: var
key: remote_addr
rejected_code: 429
rejected_msg: 高乘載管制
policy: local
allow_degradation: false
show_limit_quota_header: true
要在Dashboard上顯示
limit-count
的Plugin,需要調整apisix_dashboard_config/config.yaml
,添加:plugins: # plugin list (sorted in alphabetical order) - limit-conn - limit-count - limit-req
在重新調整「新竹百貨公司」路由,增加指定使用「高乘載管制」服務(路由也有Plugin設定,也就是特定路由可以有自己的交通規則):
現在如果過於常逛新竹百貨公司,就可能被暫時拒於門外。