首页 > 解决方案 > 防止 NGINX 缓冲包

问题描述

我需要使用 NGINX 代理修改 MQTT 发布包的主题。我创建了一个由 js_filter 调用的 njs 函数。

function updateTopic(s) {
  s.log("buf: " + s.buffer.toString('hex'));

  if (!s.fromUpstream) {
    if(s.buffer.indexOf("topic") != -1){
      s.buffer = s.buffer.replace("topic", "mopic").toBytes();
      s.log("new buffer: " + s.buffer.toString('hex'));
    }

  }

  return s.OK;
}

返回:

缓冲区:300f0005746f7069636d65737361676533

新缓冲区:300f00056d6f7069636d65737361676533

此函数正确更新 s.buffer,但在收到另一种类型的包之前不会传输包。当收到订阅、断开连接、ping 消息时,所有缓冲的消息都会立即传输。

如果这个函数不替换一个包,它会被立即传输。

更改 s.buffer 后我应该做一些特别的事情吗?

标签: nginxproxynginx-reverse-proxy

解决方案


原来是由于一个错误,将在以后的版本中修复。

https://github.com/nginx/njs/issues/45


推荐阅读