代理详解 - 玩转Kong网关

Kong侦听四个端口的请求,默认情况是:

8000:此端口是Kong用来监听来自客户端的HTTP请求的,并将此请求转发到您的上游服务。这也是本教程中最主要用到的端口。

8443:此端口是Kong监听HTTP的请求的端口。该端口具有与8000端口类似的行为,但是它只监听HTTPS的请求,并不会产生转发行为。可以通过配置文件来禁用此端口。

8001:用于管理员对KONG进行配置的端口。

8444:用于管理员监听HTTPS请求的端口。

在本文中,我们将介绍Kong的路由功能,并详细说明8000端口上的客户端请求如何根据请求头、URI或HTTP被代理到配置中的上游服务。

先注册个API,然后跟着COPY几个命令玩玩:

入门示例

先做一个最简单的转发。当访问8000端口时,自动转发到http://api01.bitspaceman.com:8000/news/qihoo

1、先创建两个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、最后,访问一下:

根据hosts=news.com做转发
根据hosts=news.com和paths=/news做转发

原理,等同于Nginx的location。后面介绍下详细的用法。


hosts属性

可以设置多个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属性

可以设置多个path:

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

还可以使用正则表达式:

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

给正则设置优先级:

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

优先级别如下:
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属性

当使用代理的时候,Kong的默认(false)是将上游请求的Host头设置为API的upstream_url属性的主机名。

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

客户端请kong的请求头:

GET / HTTP/1.1
Host: service.com

设置为false,kong将从upstream_url中提取主机名作为HOST的值去请求上游服务。

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

设置为true,客户端请求的HOST通过kong透传到上游服务,而不是从upstream_url提取。

GET / HTTP/1.1
Host: service.com


strip_uri属性

指定uri前缀去匹配一个API,但是不包含在上游的请求中。这个参数接收一个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网关系统(Kong教程)入门到精通

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,169评论 19 139
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,764评论 1 92
  • 配置加载 Kong的默认配置在 /etc/kong/kong.conf.default 。如果你通过一个官方的安装...
    DreamsonMa阅读 55,655评论 0 16
  • 文/蓝天 小小烫伤一周,窝在家里没敢出去散步。下雨,泥泞潮湿,怕水弄湿了鞋子,又是一周窝家长肉。两周的宅居后再走出...
    西方家的阅读 2,224评论 0 0
  • 这是一个小人物的大学生活心路历程,不求惊艳,但求真诚。 01 坐在窗明几净的写字楼里,结束了一天的工作,我平静写下...
    欣所向之阅读 6,078评论 78 80

友情链接更多精彩内容