參考:https://www.cnblogs.com/succour/p/6305574.html
EMQ官方文檔:https://docs.emqx.io/broker/v3/cn/
一,系統環境及軟件選擇
系統環境查看
軟件版本選擇
EMQ X Broker 3.2.1 Nginx 1.12.0
二,軟件安裝與配置
下載EMQ
https://www.emqx.io/downloads/broker/v3.2.1/emqx-centos7-v3.2.1.x86_64.rpm
安裝
rpm -ivh emqx-centos7-v3.2.1.x86_64.rpm
啟動
systemctl start emqx systemctl enable emqx
配置文件
/etc/emqx/emqx.conf
其他保存默認修改一下兩行配置證書(ssl證書可以去阿里雲申請免費的證書)
listener.wss.external.keyfile = /etc/emqx/certs/key.pem listener.wss.external.certfile = /etc/emqx/certs/cert.pem
重啟
systemctl restart emqx
證書測試登錄管理頁面
http://IP:18083/#/websocket
默認用戶名密碼為admin public可以通過以下命令修改
emqx_ctl admins passwd admin password
測試(必須使用域名不能使用IP,在沒有設置nginx反向代理的時候可以直接設置本機host指向ip為emq主機進行測試)
nginx反向代理配置
nginx安裝不詳述
增加一個server配置文件內容如下
server { #listen 8084 ssl backlog=2048; listen 8084; ssl on; server_name www.xxx.com; error_log /opt/log/emqxerror.log; access_log /opt/log/emqxaccess.log; client_max_body_size 100M; ssl_certificate /opt/ssl/cert.pem; ssl_certificate_key /opt/ssl/key.pem; ssl_session_cache shared:SSL:1m; ssl_session_timeout 100m; ssl_prefer_server_ciphers on; ssl_protocols TLSv1.2 TLSv1.1 TLSv1; ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"; location / { proxy_redirect off; proxy_pass https://emq_server; #proxy_pass http://172.16.90.56:8084; proxy_set_header Host $host; # 反向代理保留客戶端地址 proxy_set_header X-Real_IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr:$remote_port; # WebSocket 額外請求頭 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; #proxy_set_header Connection “upgrade”; } }
反向代理增加以下配置
upstream emq_server { server 172.16.90.56:8084 weight=1; }
PS:配置文件中除注釋外不要出現非英文字符,本次配置因為配置proxy_set_header Connection “upgrade”包含中文引號導致配置不生效,測試出現502錯誤
外網防火牆配置把nginx的8084端口映射出去
配置好nginx后可以在不配置host的情況下測試websocket
如果是配置反向代理ws則增加配置文件如下
#emqx的ws8083端口反向代理配置,頁面通過連接ws://www.xxx.net/mqtt連接消息隊列 server { listen 8083; ssl off; server_name www.xxx.net; error_log /opt/log/emqxerror.log; access_log /opt/log/emqxaccess.log; client_max_body_size 100M; location / { proxy_redirect off; proxy_pass http://emq_server_http; #這里為http和上面的https有所區別 proxy_set_header Host $host; # 反向代理保留客戶端地址 proxy_set_header X-Real_IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr:$remote_port; # WebSocket 額外請求頭 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }
反向代理增加以下配置
upstream emq_server_http { server 172.16.90.56:8083 weight=1; }
外網防火牆增加對端口8083的對外映射