对 Kong 非常陌生,并且在 Kong 路由方面遇到困难。在 Kong 3.3.0 版本上。
我正在从一台机器向另一台机器发出请求,通过两个网关,一个是 Nginx,另一个是 Kong。 Kong 网关返回以下错误...
{
"message":"no Route matched with those values"
}
...尽管 URI 与预期的路由路径匹配。最奇怪的是,如果我在 Kong 网关所在的机器上发出相同的卷曲请求,它就会起作用。只是经过Nginx网关后,请求似乎无法匹配。
此外,我尝试使用此Kong 故障排除指南 进行调试失败了。我尝试使用 Kong-Debug,但如果我在 Kong 网关的计算机上发出请求,我只会收到调试响应标头。我无法使跟踪配置工作。并且没有全局或特定于路由的插件导致请求丢失。
这是否足以要求更多的调试想法和可能的问题?我在想也许这与 nginx 服务器有关,或者请求来自另一台机器?
curl 请求
curl -k --verbose --location 'https://api.foo.com/identity-provider/oauth2/token'
香港航线
{
"next": null,
"data": [
{
"methods": null,
"sources": null,
"destinations": null,
"created_at": 1727956168,
"updated_at": 1727956168,
"https_redirect_status_code": 426,
"regex_priority": 0,
"snis": [
"api.foo.com"
],
"tags": null,
"name": "identity-provider",
"id": "aca5d660-891d-491c-a337-a6b4c974e23f",
"headers": null,
"path_handling": "v0",
"protocols": [
"https"
],
"response_buffering": true,
"service": {
"id": "4861e944-7086-49b9-9ff6-9cce79f0e16c"
},
"request_buffering": true,
"preserve_host": false,
"hosts": [
"api.foo.com"
],
"strip_path": true,
"paths": [
"/identity-provider"
]
}
]
}
Kong日志
Remote: (172.16.1.126) kong [03/Oct/2024:12:03:56 +0000] POST /identity-provider/oauth2/token HTTP/1.1 404 Upstream: (-) api.myfoo.com 172.16.1.126, 172.16.1.126
log_format
log_format print_upstream 'Remote: ($remote_addr) $server_name [$time_local] $request $status Upstream: ($upstream_addr) $host Forwarded for: ($http_x_forwarded_for)';
nginx 配置(总结)
http {
upstream foo-upstream {
server api-other.foo.com:443;
keepalive 10;
}
server {
listen 443 ssl default_server;
server_name api.bar.com;
location /identity-provider/oauth2/token {
access_log /var/log/nginx/security-server-endpoint.log main;
proxy_pass https://foo-upstream/identity-provider/oauth2/token;
}
}
}
注意:我知道服务器名称是 api.bar.com 而不是 api.foo.com。我尝试更改服务器名称并设置证书。同样的路由匹配错误,所以我不认为这是根本原因。
带有nginx的机器上的dnsmasq配置
address=/api.foo.com/172.16.1.126
address=/api-other.foo.com/172.16.2.127
server=/foo.com/172.16.2.126
注:
172.16.1.126
172.16.2.126
据我了解,curl 请求的网络路径是这样的: api.foo.com
相关答案在这里:Rails:通过 Kong (Heroku) 转发的请求没有路由匹配错误 文档:https://docs.konghq.com/gateway/latest/reference/configuration/#trusted_ips
答案是
trusted_ips
配置。我的可信 IP 配置包括带有 nginx 服务器的机器的 IP (172.16.1.126
)。一旦我从网络掩码中排除该 IP 地址,请求就会按预期匹配。