grpc_socket_keepalive

grpc_socket_keepalive 指令在 NGINX 中为 gRPC 连接启用 TCP keepalive。 — NGINX HTTP Core

grpc_socket_keepalive
httpserverlocation
语法grpc_socket_keepalive on | off;
默认值off
上下文http, server, location
模块NGINX HTTP Core
参数flag

说明

`grpc_socket_keepalive` 指令用于启用或禁用 NGINX 处理的 gRPC 连接的 TCP keepalive 功能。当启用时,该指令通过定期发送 keepalive 探测包来确保空闲的 TCP 连接保持活跃。这对于维护长连接至关重要,gRPC 在服务间通信中通常使用长连接。默认情况下,许多操作系统可能未启用 TCP keepalive,这可能导致连接在长时间空闲后被关闭并中断通信。 该指令接受一个标志值,即可以设置为 'on'(启用)或 'off'(禁用)。当设置为 'on' 时,NGINX 会为套接字配置 keepalive 相关选项,使其根据系统中定义的设置(例如 `tcp_keepalive_time`、`tcp_keepalive_intvl` 和 `tcp_keepalive_probes` 选项)发送 keepalive 包。因此,亦需在系统级别调整这些参数以确保 keepalive 按预期工作。请注意,在没有适当服务器设置的情况下启用此功能可能会导致性能问题或不必要的网络流量,尤其是在高规模环境中。

配置示例

server {
    listen 80;
    grpc_socket_keepalive on;
    location /myservice {
        grpc_pass grpc://backend;
    }
}

确保操作系统的 TCP keepalive 设置已适当配置,因为 NGINX 依赖它们来管理 keepalive 数据包。

不要在短连接上启用 keepalive,因为这可能导致性能开销而没有显著收益。