美文网首页MQTT
EMQ X 消息服务器 Nginx 反向代理

EMQ X 消息服务器 Nginx 反向代理

作者: EMQ | 来源:发表于2018-10-23 09:35 被阅读640次

前言

很多使用 EMQ X 消息服务器的童鞋,会发现随着业务量的增长会考虑到 EMQ X 节点的扩容,多节点之后,如果节点前没有挂载代理,就需要在客户端指定连接哪台 EMQ X 节点,如果其中一台节点升级,还需要在客户端重新做设置,但如果在集群节点挂载反向代理,就可以通过反向代理将连接分配到另外节点上,从而避免在客户端的更改和重新部署。So,今天 EMQ君就聊聊 Nginx 反向代理的事吧!

Nginx安装

依赖安装

安装pcre、zlib、openssl

$ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.42.tar.gz
$ tar -zxf pcre-8.42.tar.gz
$ cd pcre-8.42
$ ./configure
$ make
$ sudo make install
$ wget http://zlib.net/zlib-1.2.11.tar.gz
$ tar -zxf zlib-1.2.11.tar.gz
$ cd zlib-1.2.11
$ ./configure
$ make
$ sudo make install
wget -O openssl.tar.gz -c https://github.com/openssl/openssl/archive/OpenSSL_1_0_2l.tar.gz
tar zxf openssl.tar.gz
mv openssl-OpenSSL_1_0_2l/ openssl

下载安装Nginx

源码编译安装Nginx

$ wget https://nginx.org/download/nginx-1.14.0.tar.gz
$ tar zxf nginx-1.14.0.tar.gz
$ cd nginx-1.14.0
./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-pcre=../pcre-8.42 --with-zlib=../zlib-1.2.11 --with-http_ssl_module --with-stream --with-stream_ssl_module --with-openssl=/opt/openssl

编译安装

make && make install

EMQ X节点集群

EMQ X 的节点集群,可参阅官方文档:http://emqtt.com/docs/v2/cluster.html

Nginx TCP/SSL 反向代理设置

TCP 反向代理设置

TCP 反向代理设置:

mkdir -p  /usr/local/nginx/tcp.d/
cat <<- 'EOF' >> /usr/local/nginx/nginx.conf
include /usr/local/nginx/tcp.d/*.conf;
EOF
vim emqx_tcp_nginx.conf
stream
{
log_format proxy '$remote_addr [$time_local] '
                 '$protocol $status $bytes_sent $bytes_received '
                 '$session_time "$upstream_addr" '
                 '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';

    access_log /var/log/nginx/tcp-access.log proxy ;
    open_log_file_cache off;
upstream mqtt1883 {
    #zone tcp_servers 64k;
    #hash $remote_addr;
    server 192.168.1.10:1883 weight=1;
    server 192.168.1.13:1883 weight=1;
}
server {
        listen       1883;
        proxy_send_timeout 2h;
        proxy_read_timeout 2h;
        proxy_connect_timeout 150s;
        proxy_timeout 150s;
        proxy_pass mqtt1883;
        proxy_buffer_size 3M;
        tcp_nodelay on;
}
}

客户端通过连接 <Nginx IP:1883> 地址,Nginx将连接负载到 EMQ X 节点,EMQ 君测试200个客户端连接效果,读者可以看到200个连接已经被分布到2个EMQ X 节点上了:

nginx_tcp.jpeg

SSL 反向代理设置

以下配置文件中,证书直接使用的 EMQ X 自带证书,EMQ X 自带证书目录 emqx/etc/certs。

 cat emqx_ssl_nginx.conf
stream{

    upstream backend{
    #   hash $remote_addr consistent;
        least_conn;
        server 192.168.1.10:1883 weight=1;
        server 192.168.1.13:1883 weight=1;
        }

  server {
        listen 8883 ssl;
        proxy_send_timeout 2h;
        proxy_read_timeout 2h;
        proxy_connect_timeout 150s;
        proxy_timeout 150s;
        proxy_pass backend;
        proxy_buffer_size 3M;
        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers         AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
        ssl_certificate     /root/nginx-certs/certs/cert.pem;
        ssl_certificate_key /root/nginx-certs/certs/key.pem;
        ssl_session_cache   shared:SSL:10m;
        ssl_session_timeout 10m;
        }
}

客户端通过 SSL 方式连接 <Nginx IP:8883> 地址,Nginx将连接以 TCP 方式负载到 EMQ X 节点。

总结

以上配置,简明的介绍了关于 Nginx 在 TCP/SSL 反向代理的配置,在实际生产环境当中,可根据实际情况,来调整 Nginx 配置参数。读者可直接参考本文结合 Nginx 官网文档进行测试,enjoy it o

相关文章

网友评论

  • 全宏:请问一下,那emq1和emq2节点需要组成集群吗?

本文标题:EMQ X 消息服务器 Nginx 反向代理

本文链接:https://www.haomeiwen.com/subject/ppjozftx.html