kong的preserve_host和strip_uri解析
- preserve_host:当代理的时候,k代理时,Kong的默认行为是将上游请求的Host头设置为API的upstream_url属性的主机名。这个参数接受一个boolean值。
当为FALSE时,如下:
{
"name": "my-api",
"upstream_url": "http://my-api.com",
"hosts": ["service.com"],
}
客户端请kong的请求头:
GET / HTTP/1.1
Host: service.com
kong将从upstream_url中提取主机名作为HOST的值去请求上游服务。如下:
GET / HTTP/1.1
Host: my-api.com
当明确的制定为true时,
{
"name": "my-api",
"upstream_url": "http://my-api.com",
"hosts": ["service.com"],
"preserve_host": true
}
还是上面的那个相同的客户端请求,kong将发送如下的请求头去请求上游服务。
GET / HTTP/1.1
Host: service.com
即客户端请求的HOST通过kong透传到上游服务,而不是从upstream_url提取。
- strip_uri:指定uri前缀去匹配一个API,但是不包含在上游的请求中。这个参数接收一个boolean的值。
{
"name": "my-api",
"upstream_url": "http://my-api.com",
"uris": ["/service"],
"strip_uri": true
}
启用这个属性,当kong代理这个API时,在上游请求的url中将不包含匹配uri前缀。
GET /service/path/to/resource HTTP/1.1
Host:
发送到上游服务时:(preserve_host默认为false,Host从upstream_url提取,strip_uri为true,则请求进来的url将跳过url对应的匹配,然后代理到上游服务器)
GET /path/to/resource HTTP/1.1
Host: my-api.com
代理一个api通过它的request_path的值
如果你想要配置你的apis,让kong路由进来的请求通过请求的uri。
下面例子:INCOMING REQUEST表示请求kong的,UPSTREAM REQUEST像上游服务器请求的uri
uris | strip_uri | INCOMING REQUEST | UPSTREAM REQUEST |
---|---|---|---|
/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 |