如何在 Kong v1.1.2 中设置超时
How to set timeout in Kong v1.1.2
问题
我在 Kong 错误日志中收到一条错误消息,报告上游服务器已超时。但我知道上游进程只占用了一分钟,当它完成时(在 Kong 记录错误之后)它记录了一个 java 错误 "Broken Pipe",这意味着 Kong 不再监听响应。
这是上游进程耗时超过 60 秒时的行为。在某些情况下,只需不到 60 秒,一切正常。
如何延长Kong的超时时间?
详情
港版
1.1.2
Kong 的错误信息(略有编辑):
2019/12/06 09:57:10 [error] 1421#0: *1377 upstream timed out (110: Connection timed out) while reading response header from upstream, client: xyz.xyz.xyz.xyz, server: kong, request: "POST /api/...... HTTP/1.1", upstream: "http://127.0.0.1:8010/api/.....", host: "xyz.xyz.com"
这是来自上游服务器日志的错误(Java / Tomcat 通过 SpringBoot)
Dec 06 09:57:23 gateway-gw001-99 java[319]: org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe
Dec 06 09:57:23 gateway-gw001-99 java[319]: at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:364) ~[tomcat-embed-core-8.5.42.jar!/
Dec 06 09:57:23 gateway-gw001-99 java[319]: at org.apache.catalina.connector.OutputBuffer.flushByteBuffer(OutputBuffer.java:833) ~[tomcat-embed-core-8.5.42.jar!
...
我的kong.conf(稍作编辑)
trusted_ips = 0.0.0.0/0
admin_listen = 0.0.0.0:8001
proxy_listen = 0.0.0.0:8080 proxy_protocol, 0.0.0.0:8443 ssl proxy_protocol
database = postgres
pg_host = 127.0.0.1
pg_port = 5432
pg_user = kong
pg_password = xyzxyzxyzxyzxyz
pg_database = kong
plugins = bundled,session
real_ip_header = proxy_protocol
多一点上下文
- Kong 和上游服务器托管在同一个 Ubuntu 虚拟机上
- Ubuntu VM 作为 linux 容器 (LXC) 在另一个 Ubuntu VM
中托管
- 外部 VM 使用 NGinX 接收 public 流量并将其反向代理到 Kong。它使用流来做到这一点。这让Kong成为我的SSL分界点。
外部 NGinX 流配置:
stream {
server {
listen 80;
proxy_pass xyz.xyz.xyz.xyz:8080;
proxy_protocol on;
}
server {
listen 443;
proxy_pass xyz.xyz.xyz.xyz:8443;
proxy_protocol on;
}
}
我试过的
我尝试将以下行添加到 kong.conf。在 Kong 的 1.1.2 版本中,您基本上可以通过向 NginX 配置添加前缀并将它们放在 kong.conf (https://docs.konghq.com/1.1.x/configuration/#injecting-individual-nginx-directives ) 中来远程更改 NGinX 设置。 None 其中似乎无所不能:
nginx_http_keepalive_timeout=300s
nginx_proxy_proxy_read_timeout=300s
nginx_http_proxy_read_timeout=300s
nginx_proxy_send_timeout=300s
nginx_http_send_timeout=300s
根据 documentation Kong
版本 0.10 具有三个属性,您可以设置这些属性来管理 proxy
连接
upstream_connect_timeout
:以毫秒为单位定义超时
建立与上游服务的连接。
upstream_send_timeout
:以毫秒为单位定义用于传输请求的两个连续写入操作之间的超时
到您的上游服务。
upstream_read_timeout
:
以毫秒为单位定义两次连续读取之间的超时
从上游服务接收请求的操作。
在这种情况下,由于 Kong
等待上游的响应超时,您需要为 upstream_read_timeout
添加 属性 设置
在 Kong
版本 1.1 documentation 中,服务对象现在包含这些名称略有不同的超时属性:
connect_timeout
:与上游服务器建立连接的超时时间,以毫秒为单位。默认为 60000。
write_timeout
:向上游服务器发送请求的两次连续写入操作之间的超时时间(以毫秒为单位)。默认为 60000。
read_timeout
:向上游服务器发送请求的两次连续读取操作之间的超时时间(以毫秒为单位)。默认为 60000。
问题
我在 Kong 错误日志中收到一条错误消息,报告上游服务器已超时。但我知道上游进程只占用了一分钟,当它完成时(在 Kong 记录错误之后)它记录了一个 java 错误 "Broken Pipe",这意味着 Kong 不再监听响应。
这是上游进程耗时超过 60 秒时的行为。在某些情况下,只需不到 60 秒,一切正常。
如何延长Kong的超时时间?
详情
港版
1.1.2
Kong 的错误信息(略有编辑):
2019/12/06 09:57:10 [error] 1421#0: *1377 upstream timed out (110: Connection timed out) while reading response header from upstream, client: xyz.xyz.xyz.xyz, server: kong, request: "POST /api/...... HTTP/1.1", upstream: "http://127.0.0.1:8010/api/.....", host: "xyz.xyz.com"
这是来自上游服务器日志的错误(Java / Tomcat 通过 SpringBoot)
Dec 06 09:57:23 gateway-gw001-99 java[319]: org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe
Dec 06 09:57:23 gateway-gw001-99 java[319]: at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:364) ~[tomcat-embed-core-8.5.42.jar!/
Dec 06 09:57:23 gateway-gw001-99 java[319]: at org.apache.catalina.connector.OutputBuffer.flushByteBuffer(OutputBuffer.java:833) ~[tomcat-embed-core-8.5.42.jar!
...
我的kong.conf(稍作编辑)
trusted_ips = 0.0.0.0/0
admin_listen = 0.0.0.0:8001
proxy_listen = 0.0.0.0:8080 proxy_protocol, 0.0.0.0:8443 ssl proxy_protocol
database = postgres
pg_host = 127.0.0.1
pg_port = 5432
pg_user = kong
pg_password = xyzxyzxyzxyzxyz
pg_database = kong
plugins = bundled,session
real_ip_header = proxy_protocol
多一点上下文
- Kong 和上游服务器托管在同一个 Ubuntu 虚拟机上
- Ubuntu VM 作为 linux 容器 (LXC) 在另一个 Ubuntu VM 中托管
- 外部 VM 使用 NGinX 接收 public 流量并将其反向代理到 Kong。它使用流来做到这一点。这让Kong成为我的SSL分界点。
外部 NGinX 流配置:
stream {
server {
listen 80;
proxy_pass xyz.xyz.xyz.xyz:8080;
proxy_protocol on;
}
server {
listen 443;
proxy_pass xyz.xyz.xyz.xyz:8443;
proxy_protocol on;
}
}
我试过的
我尝试将以下行添加到 kong.conf。在 Kong 的 1.1.2 版本中,您基本上可以通过向 NginX 配置添加前缀并将它们放在 kong.conf (https://docs.konghq.com/1.1.x/configuration/#injecting-individual-nginx-directives ) 中来远程更改 NGinX 设置。 None 其中似乎无所不能:
nginx_http_keepalive_timeout=300s
nginx_proxy_proxy_read_timeout=300s
nginx_http_proxy_read_timeout=300s
nginx_proxy_send_timeout=300s
nginx_http_send_timeout=300s
根据 documentation Kong
版本 0.10 具有三个属性,您可以设置这些属性来管理 proxy
连接
upstream_connect_timeout
:以毫秒为单位定义超时 建立与上游服务的连接。upstream_send_timeout
:以毫秒为单位定义用于传输请求的两个连续写入操作之间的超时 到您的上游服务。upstream_read_timeout
: 以毫秒为单位定义两次连续读取之间的超时 从上游服务接收请求的操作。
在这种情况下,由于 Kong
等待上游的响应超时,您需要为 upstream_read_timeout
在 Kong
版本 1.1 documentation 中,服务对象现在包含这些名称略有不同的超时属性:
connect_timeout
:与上游服务器建立连接的超时时间,以毫秒为单位。默认为 60000。write_timeout
:向上游服务器发送请求的两次连续写入操作之间的超时时间(以毫秒为单位)。默认为 60000。read_timeout
:向上游服务器发送请求的两次连续读取操作之间的超时时间(以毫秒为单位)。默认为 60000。