为MQTT配置Nginx反向代理

h4cxqtbf  于 2023-04-29  发布在  Nginx
关注(0)|答案(3)|浏览(1293)

我正在尝试设置一个反向代理,将localhost:8081解析为安装在其他机器上的代理。我的Nginx配置文件是:

worker_processes  1;

events {
    worker_connections 1024;
}

server {
    listen 8081;
    server_name localhost;

    location / {
        proxy_pass tcp://192.168.1.177:1883;
    }
}

但是当我尝试连接到代理(从我配置Nginx的机器)时

mosquitto_sub -h localhost -p 8081 -t "stat/tasmota_8231A8/POWER1"

出现错误Connection refused。
编辑:Mosquitto broker配置:

persistence true
persistence_location /var/lib/mosquitto/

include_dir /etc/mosquitto/conf.d

listener 1883
allow_anonymous true

编辑我尝试使用此配置文件为nginx worker_processes 1;

events {
    worker_connections 1024;
}
stream {
   listen 8081;
   proxy_pass 192.168.1.77:1883;
}
yhuiod9q

yhuiod9q1#

这对原生MQTT不起作用。
您配置的是HTTP代理,但MQTT!= HTTP。
您需要将nginx配置为流代理。例如

stream {
  server {
      listen 8081;
      proxy_pass 192.168.1.77:1883;
  }
}

https://docs.nginx.com/nginx/admin-guide/tcp-udp-load-balancer/
或者将mosquito配置为支持MQTT over WebSockets(假设客户端也支持此功能)。然后,您可以使用基于HTTP的代理作为通过HTTP的WebSockets bootstrap。

qco9c6ql

qco9c6ql2#

我让你的场景完全使用以下配置(防火墙关闭,SELinux设置为许可):
nginx config(在loadbalancer 1上):

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
   worker_connections 1024;
}

stream {

   server {
      listen              1883;
      proxy_pass          stream_backend;
      proxy_buffer_size   16k;
   }

   upstream stream_backend {
      server mqtt-node-1:1883;
      server mqtt-node-2:1883;
  }

}
mqtt-node-1和mqtt-node-2上的mqttto配置:

max_queued_bytes 10000

max_queued_messages 100

listener 1883

log_type error
log_type information
log_type debug
log_type warning
qrjkbowd

qrjkbowd3#

拒绝连接表示尝试连接到没有服务正在侦听的端口。请验证nginx服务正在运行,并且确实存在侦听器。您可以通过以下方式实现此目的

sudo netstat -nlt

此命令将显示占用的端口。nginx监听器的配置端口应该出现在列表中

相关问题