EMQX 18083 HTTP 接口是否支持 Proxy Protocol v2?请求携带 PP 后返回 400

你好,

我在排查 EMQX HTTP 接口与 Proxy Protocol 的兼容性问题,想确认一下这是否属于预期行为。

环境信息:

  • EMQX 部署在 Kubernetes 上
  • 18083 端口用于 EMQX Dashboard / HTTP API
  • 前面接了 NLB
  • NLB 的 listener 开启了 Proxy Protocol

问题现象:
当请求到达 EMQX 的 HTTP 接口时,如果在 HTTP 请求数据之前携带了 Proxy Protocol 头,请求会返回 HTTP 400。

我观察到的现象:

  1. 正常的 HTTP 请求访问 EMQX 接口是成功的
  2. 如果同样的请求前面加上 Proxy Protocol,再发给 EMQX,则返回 HTTP 400
  3. 因此我怀疑 18083 这个 HTTP 接口本身并不支持 Proxy Protocol 解析

我当前的理解是:

  • Proxy Protocol 是加在真正的 HTTP 请求内容之前的
  • 如果服务端在该端口不支持 Proxy Protocol,那么它会把前面的字节流当成非法 HTTP 请求处理,从而返回 400

我想确认的问题:

  1. EMQX 的 18083 端口(Dashboard / HTTP API)是否支持 Proxy Protocol v1 或 v2?
  2. 如果不支持,那么当请求带着 Proxy Protocol 到达时,返回 HTTP 400 是否属于预期行为?
  3. Proxy Protocol 是否只支持 MQTT / WebSocket listeners,而不支持 Dashboard 的 HTTP 接口?

总结一下:
目前看起来,向 EMQX 18083 端口发送“带 Proxy Protocol 的 HTTP 请求”会返回 HTTP 400。我想确认这是否是设计上的预期行为。

谢谢。

这个现象是预期行为:你把 Proxy Protocol 头直接发到 18083,而 Dashboard HTTP 监听器默认不解析它,所以会按非法 HTTP 报文返回 400。

18083 是 Dashboard + REST API 端口;这里用的是 dashboard.listeners.http/https.proxy_header(默认 false)。
proxy_header = false 时,普通 HTTP 正常,带 Proxy Protocol 的请求会 400。

proxy_header = true 时,会解析 HAProxy header,但普通 HTTP(不带 Proxy Protocol)将无法处理。

如果你希望 NLB 在 18083 前开启 Proxy Protocol,EMQX 侧要同步打开:

dashboard.listeners.http.proxy_header = true
# 如果走 HTTPS 管理口,则配 https
dashboard.listeners.https.proxy_header = true