代理詳解 - 玩轉(zhuǎn)Kong網(wǎng)關(guān)

Kong偵聽四個端口的請求,默認(rèn)情況是:

8000:此端口是Kong用來監(jiān)聽來自客戶端的HTTP請求的捞挥,并將此請求轉(zhuǎn)發(fā)到您的上游服務(wù)。這也是本教程中最主要用到的端口忧吟。

8443:此端口是Kong監(jiān)聽HTTP的請求的端口砌函。該端口具有與8000端口類似的行為,但是它只監(jiān)聽HTTPS的請求瀑罗,并不會產(chǎn)生轉(zhuǎn)發(fā)行為胸嘴〕樱可以通過配置文件來禁用此端口斩祭。

8001:用于管理員對KONG進(jìn)行配置的端口。

8444:用于管理員監(jiān)聽HTTPS請求的端口乡话。

在本文中摧玫,我們將介紹Kong的路由功能,并詳細(xì)說明8000端口上的客戶端請求如何根據(jù)請求頭绑青、URI或HTTP被代理到配置中的上游服務(wù)诬像。

先注冊個API,然后跟著COPY幾個命令玩玩:

入門示例

先做一個最簡單的轉(zhuǎn)發(fā)闸婴。當(dāng)訪問8000端口時坏挠,自動轉(zhuǎn)發(fā)到http://api01.bitspaceman.com:8000/news/qihoo

1邪乍、先創(chuàng)建兩個Service:

curl -i -X POST \
  --url http://localhost:8001/services/ \
  --data 'name=example-service' \
  --data 'url=http://api01.bitspaceman.com:8000/news/qihoo'

curl -i -X POST \
  --url http://localhost:8001/services/ \
  --data 'name=163-service' \
  --data 'url=http://3g.163.com/touch/jsonp/sy/recommend'

2降狠、然后对竣,添加兩個Route:

curl -i -X POST \
  --url http://localhost:8001/services/example-service/routes \
  --data 'hosts[]=news.com'

curl -i -X POST \
  --url http://localhost:8001/services/163-service/routes \
  --data 'paths[]=/news'  \
  --data 'hosts[]=news.com'

3、最后榜配,訪問一下:

根據(jù)hosts=news.com做轉(zhuǎn)發(fā)
根據(jù)hosts=news.com和paths=/news做轉(zhuǎn)發(fā)

原理否纬,等同于Nginx的location。后面介紹下詳細(xì)的用法蛋褥。


hosts屬性

可以設(shè)置多個host临燃,像下面這樣:

$ curl -i -X POST http://localhost:8001/routes/ \
    -H 'Content-Type: application/json' \
    -d '{"hosts":["example.com", "foo-service.com"]}'

# 或者

$ curl -i -X POST http://localhost:8001/routes/ \
    -d 'hosts[]=example.com' \
    -d 'hosts[]=foo-service.com'

也可以使用通配符:

{
    "hosts": ["*.example.com", "service.com"]
}


paths屬性

可以設(shè)置多個path:

{
    "paths": ["/service", "/hello/world"]
}

還可以使用正則表達(dá)式:

{
    "paths": ["/users/\d+/profile", "/following"]
}

給正則設(shè)置優(yōu)先級:

[
    {
        "paths": ["/status/\d+"],
        "regex_priority": 0
    },
    {
        "paths": ["/version/\d+/status/\d+"],
        "regex_priority": 6
    },
    {
        "paths": ["/version"],
        "regex_priority": 3
    },
]

優(yōu)先級別如下:
1、/version
2烙心、/version/\d+/status/\d+
3膜廊、/status/\d+

如何捕獲正則分組?

如下面一個path:

/version/(?<version>\d+)/users/(?<user>\S+)

支持這樣一個請求:

/version/1/users/john

還可以被插件使用:

local router_matches = ngx.ctx.router_matches
-- router_matches.uri_captures is:
-- { "1", "john", version = "1", user = "john" }

Path添加字符的方式 ?

$ curl -i -X POST http://localhost:8001/routes \
    --data-urlencode 'uris[]=/status/\d+'


preserve_host屬性

當(dāng)使用代理的時候淫茵,Kong的默認(rèn)(false)是將上游請求的Host頭設(shè)置為API的upstream_url屬性的主機名溃论。

{
    "name": "my-api",
    "upstream_url": "http://my-api.com",
    "hosts": ["service.com"],
}

客戶端請kong的請求頭:

GET / HTTP/1.1
Host: service.com

設(shè)置為false,kong將從upstream_url中提取主機名作為HOST的值去請求上游服務(wù)痘昌。

GET / HTTP/1.1
Host: my-api.com

設(shè)置為true钥勋,客戶端請求的HOST通過kong透傳到上游服務(wù),而不是從upstream_url提取辆苔。

GET / HTTP/1.1
Host: service.com


strip_uri屬性

指定uri前綴去匹配一個API算灸,但是不包含在上游的請求中。這個參數(shù)接收一個boolean的值驻啤。

uris strip_uri 客戶端請求 上游請求
/mockbin false /some_path not proxied
/mockbin false /mockbin /mockbin
/mockbin false /mockbin/some_path /mockbin/some_path
/mockbin true /some_path not proxied
/mockbin true /mockbin /
/mockbin true /mockbin/some_path /some_path


method屬性

就是GET菲驴、POST、PUT骑冗、DELETE等等赊瞬,不多說了。

穿梭機:開源API網(wǎng)關(guān)系統(tǒng)(Kong教程)入門到精通

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贼涩,一起剝皮案震驚了整個濱河市巧涧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌遥倦,老刑警劉巖谤绳,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異袒哥,居然都是意外死亡缩筛,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門堡称,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瞎抛,“玉大人,你說我怎么就攤上這事却紧⊥╇” “怎么了钞艇?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長豪硅。 經(jīng)常有香客問我哩照,道長,這世上最難降的妖魔是什么懒浮? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任飘弧,我火速辦了婚禮,結(jié)果婚禮上砚著,老公的妹妹穿的比我還像新娘次伶。我一直安慰自己,他們只是感情好稽穆,可當(dāng)我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布冠王。 她就那樣靜靜地躺著,像睡著了一般舌镶。 火紅的嫁衣襯著肌膚如雪柱彻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天餐胀,我揣著相機與錄音哟楷,去河邊找鬼。 笑死否灾,一個胖子當(dāng)著我的面吹牛卖擅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播墨技,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼惩阶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了扣汪?” 一聲冷哼從身側(cè)響起断楷,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎私痹,沒想到半個月后脐嫂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡紊遵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了侥蒙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暗膜。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鞭衩,靈堂內(nèi)的尸體忽然破棺而出学搜,到底是詐尸還是另有隱情娃善,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布瑞佩,位于F島的核電站聚磺,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏炬丸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望钢悲。 院中可真熱鬧屯烦,春花似錦、人聲如沸首启。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽毅桃。三九已至褒纲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間钥飞,已是汗流浹背外厂。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留代承,地道東北人汁蝶。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像论悴,于是被迫代替她去往敵國和親掖棉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理膀估,服務(wù)發(fā)現(xiàn)幔亥,斷路器,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架察纯,建立于...
    Hsinwong閱讀 22,394評論 1 92
  • 配置加載 Kong的默認(rèn)配置在 /etc/kong/kong.conf.default 帕棉。如果你通過一個官方的安裝...
    DreamsonMa閱讀 55,011評論 0 16
  • 文/藍(lán)天 小小燙傷一周,窩在家里沒敢出去散步饼记。下雨香伴,泥濘潮濕,怕水弄濕了鞋子具则,又是一周窩家長肉即纲。兩周的宅居后再走出...
    西方家的閱讀 261評論 0 0
  • 這是一個小人物的大學(xué)生活心路歷程,不求驚艷膊畴,但求真誠掘猿。 01 坐在窗明幾凈的寫字樓里,結(jié)束了一天的工作唇跨,我平靜寫下...
    欣所向之閱讀 1,981評論 78 80