Skip to content

Listener Configuration

EMQXでは、リスナーはMQTTクライアントからのリクエストを受け取るために設定されます。EMQXは以下のメッセージ転送プロトコルをサポートしています。

  • TCP: ポート 1883
  • SSL: ポート 8883
  • Websocketリスナー: 8083
  • セキュアWebsocketリスナー: 8084

TIP

リスナーはダッシュボードの左側ナビゲーションメニューから Management -> Listeners をクリックして設定することも可能です。
設定ファイルからリスナーを設定する場合は、emqx.confではなくbase.hoconを使用することを推奨します。
これは、emqx.confに設定を記述すると、ダッシュボード経由での変更が一時的なものとなり、EMQX再起動時に失われるためです。

TIP

EMQXはカスタマイズニーズに応じた詳細な設定項目も提供しています。詳細はEMQX Enterprise Configuration Manualをご参照ください。

TCPリスナーの設定

TCPリスナーは特定のネットワークポートで着信TCP接続を待ち受けるネットワークサービスです。
クライアントとEMQX間のTCP/IPネットワーク上の接続確立および管理において重要な役割を果たします。

EMQXでTCPリスナーを設定するには、EMQXインストールディレクトリのetcフォルダ内にあるbase.hoconファイルにlisteners.tcpの設定項目を追加します。

例えば、ポート1883でTCPリスナーを有効化し、最大1,024,000の同時接続を許可する設定は以下の通りです。

bash
listeners.tcp.default {
  bind = "0.0.0.0:1883"
  max_connections = 1024000
}

ここで、

  • listeners.tcp.default はリスナーを有効化する設定で、defaultはリスナー名です。任意の名前に変更可能です。
  • bind はリスナーのIPアドレスとポートを設定します。ここでは任意のIPアドレスからのポート1883への全ての着信を待ち受けます。
  • max_connections はリスナーが許可する最大同時接続数を設定します。デフォルト値はinfinityです。

SSLリスナーの設定

SSLリスナーはSSL(Secure Sockets Layer)接続の着信を待ち受けるネットワークサービスです。
EMQXではクライアントとEMQX間のネットワークトラフィックを暗号化し、通信の安全性を確保するために使用されます。

EMQXでSSLリスナーを設定するには、etcフォルダ内のbase.hoconファイルにlisteners.sslの設定項目を追加します。

例えば、ポート8883でSSLリスナーを有効化し、最大1,024,000の同時接続を許可する設定は以下の通りです。

bash
listeners.ssl.default {
  bind = "0.0.0.0:8883"
  max_connections = 1024000
  ssl_options {
    cacertfile = "etc/certs/cacert.pem"
    certfile = "etc/certs/cert.pem"
    keyfile = "etc/certs/key.pem"
    verify = verify_none
    fail_if_no_peer_cert = false
  }
}

ここで、

  • listeners.ssl.default はリスナーを有効化する設定です。
  • bind はリスナーのIPアドレスとポートで、任意のIPアドレスからのポート8883への全ての着信を待ち受けます。
  • max_connections はリスナーが許可する最大同時接続数で、デフォルトはinfinityです。
  • ssl_options はリスナーのSSL/TLS設定で、以下のプロパティがあります。
    • cacertfile: クライアント証明書の正当性を検証するためにリスナーが使用する信頼済みCA(認証局)証明書を含むPEMファイル。
    • certfile: リスナー用のSSL/TLS証明書チェーンを含むPEMファイル。証明書がルートCAから直接発行されていない場合は、中間CA証明書をリスナー証明書の後に連結してチェーンを形成します。
    • keyfile: SSL/TLS証明書に対応する秘密鍵を含むPEMファイル。
    • verify: クライアント証明書の正当性を検証する場合はverify_peer、検証しない場合はverify_noneを設定します。
    • fail_if_no_peer_cert: trueの場合、クライアントが証明書を送信しない(空の証明書を送る)と接続を失敗させます。falseの場合は、無効な証明書を送信した場合のみ失敗し、空の証明書は有効とみなします。

WebSocketリスナーの設定

WebSocketリスナーはWebSocket経由でメッセージを受信・処理するネットワークサービスです。
EMQXのWebSocketサポートにより、クライアントはWebSocketプロトコルを使ってEMQXに接続し、リアルタイムでデータを交換できます。

EMQXでWebSocketリスナーを設定するには、etcフォルダ内のbase.hoconファイルにlisteners.wsの設定項目を追加します。

例えば、ポート8083でWebSocketリスナーを有効化し、最大1,024,000の同時接続を許可する設定は以下の通りです。

bash
listeners.ws.default {
  bind = "0.0.0.0:8083"
  max_connections = 1024000
  websocket.mqtt_path = "/mqtt"
}

ここで、

  • listeners.ws.default はリスナーを有効化する設定です。
  • bind はリスナーのIPアドレスとポートで、任意のIPアドレスからのポート8083への全ての着信を待ち受けます。
  • max_connections はリスナーが許可する最大同時接続数で、デフォルトはinfinityです。
  • websocket.mqtt_path はWebSocketのMQTTプロトコル用パスを設定し、デフォルトは/mqttです。

セキュアWebSocketリスナーの設定

セキュアWebSocketリスナーは、SSLまたはTLSプロトコルを使用してWebSocketクライアントとブローカー間のデータを暗号化するWebSocketリスナーです。
EMQXにおけるセキュアWebSocketリスナーは、WebSocketクライアントとEMQX間で交換される機密データを保護する重要なセキュリティ対策です。

EMQXでセキュアWebSocketリスナーを設定するには、etcフォルダ内のbase.hoconファイルにlisteners.wssの設定項目を追加します。

例えば、ポート8084でセキュアWebSocketリスナーを有効化し、最大1,024,000の同時接続を許可する設定は以下の通りです。

bash
listeners.wss.default {
  bind = "0.0.0.0:8084"
  max_connections = 1024000
  websocket.mqtt_path = "/mqtt"
  ssl_options {
    cacertfile = "etc/certs/cacert.pem"
    certfile = "etc/certs/cert.pem"
    keyfile = "etc/certs/key.pem"
  }
}

ここで、

  • listeners.wss.default はリスナーを有効化する設定です。
  • bind はリスナーのIPアドレスとポートで、任意のIPアドレスからのポート8084への全ての着信を待ち受けます。
  • max_connections はリスナーが許可する最大同時接続数で、デフォルトはinfinityです。
  • websocket.mqtt_path はWebSocketのMQTTプロトコル用パスを設定し、デフォルトは/mqttです。
  • ssl_options はリスナーのSSL/TLS設定で、以下のプロパティがあります。
    • cacertfile: クライアント証明書の正当性を検証するためにリスナーが使用する信頼済みCA(認証局)証明書を含むPEMファイル。
    • certfile: リスナー用のSSL/TLS証明書チェーンを含むPEMファイル。証明書がルートCAから直接発行されていない場合は、中間CA証明書をリスナー証明書の後に連結してチェーンを形成します。
    • keyfile: SSL/TLS証明書に対応する秘密鍵を含むPEMファイル。

リスナーと設定ゾーンの紐付け

EMQXの各リスナーはゾーンに紐付けられており、デフォルトではdefaultという論理ゾーンに設定されています。

リスナーが特定のゾーンに紐付けられると、そのリスナーに接続するMQTTクライアントはそのゾーンの設定を継承します。

詳細は設定ドキュメントのZone Overrideセクションをご参照ください。