问题求助,客户端认证和授权使用HTTP服务报错recoverable_error,timeout

您正在使用的 emqx 版本信息、操作系统类型。【关键】
emqx-5.7.2-el7-amd64.rpm
centos7

提供 emqx 的日志。【关键】


emqx配置客户端认证和授权使用HTTP服务,配置的url是nginx代理地址,ngnix代理了多个http后端服务用于高可用

系统之前运行是正常的吗?问题发生时做过什么操作?【关键】
大量设备重连时出现的问题,emqx日志一直打印报错,设备在线数上不去;http后端服务日志是正常的在处理请求;观察到eqmx连nginx的连接的recv-q值比较大

把配置HTTP服务的url改成直接连服务,不通过nginx代理后恢复

尝试用什么方法调查过问题,目前得到的信息和结论。
怀疑是nginx代理、HTTP连接池、管道、超时配置造成的

想要咨询下是否建议使用nginx代理认证和授权的HTTP服务,还有连接池、管道、超时建议怎么去配置

这个现象基本就是认证/授权 HTTP 链路在代理层排队后触发超时,不是认证逻辑本身坏了。你这边“直连后恢复 + EMQX 到 Nginx 的 recv-q 变大”已经很能说明问题。
可以继续用 Nginx 做高可用,但先把参数收敛到“低排队、低管道、明确超时”:

  1. 先把 EMQX 的 HTTP 管道降到 1(等价先关闭 pipelining),不要用默认 100。
  2. 把认证器和授权器的连接池调大(先从 32 或 64 起步),避免重连风暴时队列堆积。
  3. request timeout / connect timeout 按后端 P99 延迟来配,不要让 Nginx 或后端超时小于 EMQX。
  4. 认证和授权如果共用一个 upstream,建议拆成两个 upstream,避免互相抢连接。
    EMQX 5.7 文档里这几个参数就在 Dashboard 的高级设置:连接池大小、连接超时、HTTP 管道、请求超时。HTTP 认证默认连接池是 8,HTTP 管道默认 100,在“大量设备同时重连”场景里通常偏激进。
    Nginx 侧建议至少确认:
  • proxy_http_version 1.1
  • proxy_set_header Connection ""
  • upstream keepalive 已开启
  • proxy_connect_timeoutproxy_read_timeoutproxy_send_timeout 与后端处理时延匹配
    再补 3 组信息来:eyes::eyes:
  1. EMQX 报 recoverable_error,timeout 的完整文本日志(贴文本,不要截图)。
  2. Nginx access log 里同一时段的 upstream_response_timestatus 分布。
  3. 你当前认证器/授权器的 4 个参数值:pool_sizeenable_pipeliningconnect_timeoutrequest_timeout