EMQ配置通過nginx反向代理wss和ws


  參考: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的對外映射


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM