listeners.conf配置

EMQX 企业版技术支持发表于:2022年03月28日 09:49:00

listener.tcp.external

## Examples: 1883, 127.0.0.1:1883, ::1:1883
listener.tcp.external = 0.0.0.0:1883

说明:配置名称为 external 的 MQTT/TCP 监听器的监听地址。

示例:1883:表监听 IPv4 的 0.0.0.0:1883127.0.0.1:1883:表监听地址为 127.0.0.1 网卡上的 1883 端口。 ::1:1883:表监听 IPv6 地址为 ::1 网卡上的 1883 端口。

listener.tcp.external.acceptors

## Value: Number
listener.tcp.external.acceptors = 8

说明:监听器的接收池大小。

listener.tcp.external.max_connections

## Value: Number
listener.tcp.external.max_connections = 1024000

说明:监听器允许的最大并发连接数量。

listener.tcp.external.max_conn_rate

## Value: Number
listener.tcp.external.max_conn_rate = 1000

说明:监听器允许的最大接入速率。单位:个/秒

listener.tcp.external.active_n

## Value: Number
listener.tcp.external.active_n = 100

说明:监听器持续接收 TCP 报文的次数。

listener.tcp.external.zone

## Value: String
listener.tcp.external.zone = external

说明:监听器所属的配置域 (Zone)。

listener.tcp.external.access.1

## Value: ACL Rule
##
## Example: allow 192.168.0.0/24
listener.tcp.external.access.1 = allow all

说明:监听器的 ACL 规则列表。它用于设置连接层的白/黑名单。

示例:allow all:表允许所有的 TCP 连接接入。 allow 192.168.0.0/24:表允许网络地址为 192.168.0.0/24 的 TCP 连接接入。

同时,该配置可配置多条规则:

listener.tcp.external.access.1 = deny 192.168.0.1
listener.tcp.external.access.2 = allow all

它表示,除 192.168.0.1 外的 TCP 连接都允许接入。

listener.tcp.external.proxy_protocol

## Value: on | off
## listener.tcp.external.proxy_protocol = on

说明:监听器是否开启 Proxy Protocol 的支持。

如果 EMQX 集群部署在 HAProxy 或 Nginx 后,且需要拿到客户端真实的源 IP 地址与端口,则需打开此配置。

Proxy Protcol 参考: https://www.haproxy.com/blog/haproxy/proxy-protocol (opens new window)

listener.tcp.external.proxy_protocol_timeout

## Value: cn
## listener.tcp.external.peer_cert_as_username = cn

说明:设置 Proxy Protocol 解析的超时时间。如果该时间内没收到 Proxy Protocol 的报文,EMQX 会关闭其连接。

listener.tcp.external.peer_cert_as_username

## Value: cn
## listener.tcp.external.peer_cert_as_username = cn

说明:使用客户端证书来覆盖 Username 字段的值。其可选值为:

  • cn:客户端证书的 Common Name 字段值

  • dn:客户端证书的 Subject Name 字段值

  • crt:DER 格式编码的客户端证书二进制

  • pem:基于 DER 格式上的 base64 编码后的字符串

  • md5:DER 格式证书的 MD5 哈希值

注意:在 TCP 的监听器下,该配置仅在负载均衡服务器终结 SSL 的部署情况下可以用;且负载均衡服务器需要配置 Proxy Protocol 将证书域的内容给发送至 EMQX。例如 HAProxy 的配置可参考 send-proxy-v2-ssl

listener.tcp.external.peer_cert_as_clientid

## Value: cn
## listener.tcp.external.peer_cert_as_clientid = cn

说明:使用客户端证书来覆盖 ClientID 字段的值。其可选值的含义同上。

listener.tcp.external.backlog

## Value: Number >= 0
listener.tcp.external.backlog = 1024

说明:TCP 连接队列的最大长度。它表明了系统中允许的正在三次握手的 TCP 连接队列最大个数。

listener.tcp.external.send_timeout

## Value: Duration
listener.tcp.external.send_timeout = 15s

说明:TCP 报文发送超时时间。

listener.tcp.external.send_timeout_close

## Value: on | off
listener.tcp.external.send_timeout_close = on

说明:TCP 报文发送超时后,是否关闭该连接。

listener.tcp.external.recbuf

## Value: Bytes
## listener.tcp.external.recbuf = 2KB

说明:TCP 接收缓存区大小(操作系统内核级参数)

listener.tcp.external.sndbuf

## Value: Bytes
## listener.tcp.external.sndbuf = 2KB

说明:TCP 发送缓存区大小(操作系统内核级参数)。

参见:http://erlang.org/doc/man/inet.html

listener.tcp.external.buffer

## Value: Bytes
## listener.tcp.external.buffer = 2KB

说明:TCP 缓冲区大小 (用户级)。

该值建议大于等于 sndbuffrecbuff 的最大值,以避免一些性能问题。在不配置的情况下,它默认等于 sndbuff 和 recbuff 的最大值。

参见:http://erlang.org/doc/man/inet.html

listener.tcp.external.tune_buffer

## Value: on | off
## listener.tcp.external.tune_buffer = off

说明:如果打开此配置,请设置该值等于 sndbuffrecbuff 的最大值。

listener.tcp.external.high_watermark

## Value: on | off
## Defaults to 1MB
## listener.tcp.external.high_watermark = 1MB

listener.tcp.external.nodelay

## Value: true | false
listener.tcp.external.nodelay = true

说明:即 TCP_NODELAY 参数。开启该选项即允许小的 TCP 数据报文将会立即发送。

listener.tcp.external.reuseaddr

## Value: true | false
listener.tcp.external.reuseaddr = true

说明:即 SO_REUSEADDR 参数。开启该选项即允许本地重用端口,无需等待 TIME_WAIT 状态结束。

listener.tcp.internal

## Value: IP:Port, Port
##
## Examples: 11883, 127.0.0.1:11883, ::1:11883
listener.tcp.internal = 127.0.0.1:11883

说明:配置名称为 internal 的 MQTT/TCP 监听器的监听地址。

示例:11883:表监听 IPv4 的 0.0.0.0:11883127.0.0.1:11883:表监听地址为 127.0.0.1 网卡上的 11883 端口。 ::1:11883:表监听 IPv6 地址为 ::1 网卡上的 11883 端口。

listener.tcp.internal.acceptors

## Value: Number
listener.tcp.internal.acceptors = 4

说明:监听器的接收池大小。

listener.tcp.internal.max_connections

## Value: Number
listener.tcp.internal.max_connections = 1024000

说明:监听器允许的最大并发连接数量。

listener.tcp.internal.max_conn_rate

## Value: Number
listener.tcp.internal.max_conn_rate = 1000

说明:监听器允许的最大接入速率。单位:个/秒

listener.tcp.internal.active_n

## Value: Number
listener.tcp.internal.active_n = 1000

说明:监听器持续接收 TCP 报文的次数。

listener.tcp.internal.zone

## Value: String
listener.tcp.internal.zone = internal

说明:监听器所属的配置域 (Zone)。

listener.tcp.internal.backlog

## Value: Number >= 0
listener.tcp.internal.backlog = 512

说明:TCP 连接队列的最大长度。它表明了系统中允许的正在三次握手的 TCP 连接队列最大个数。

listener.tcp.internal.send_timeout

## Value: Duration
listener.tcp.internal.send_timeout = 5s

说明:TCP 报文发送超时时间。

listener.tcp.internal.send_timeout_close

## Value: on | off
listener.tcp.internal.send_timeout_close = on

说明:TCP 报文发送超时后,是否关闭该连接。

listener.tcp.internal.recbuf

## Value: Bytes
listener.tcp.internal.recbuf = 64KB

说明:TCP 接收缓存区大小(操作系统内核级参数)

listener.tcp.internal.sndbuf

## Value: Bytes
listener.tcp.internal.sndbuf = 64KB

说明:TCP 发送缓存区大小(操作系统内核级参数)

listener.tcp.internal.buffer

## Value: Bytes
## listener.tcp.internal.buffer = 16KB

说明:TCP 缓冲区大小 (用户级)。

listener.tcp.internal.tune_buffer

## Value: on | off
## listener.tcp.internal.tune_buffer = off

说明:如果打开此配置,请设置该值等于 sndbuffrecbuff 的最大值。

listener.tcp.internal.nodelay

## Value: true | false
listener.tcp.internal.nodelay = false

说明:即 TCP_NODELAY 参数。开启该选项即允许小的 TCP 数据报文将会立即发送。

listener.tcp.internal.reuseaddr

## Value: true | false
listener.tcp.internal.reuseaddr = true

说明:即 SO_REUSEADDR 参数。开启该选项即允许本地重用端口,无需等待 TIME_WAIT 状态结束。

listener.ssl.external

## Value: IP:Port | Port
##
## Examples: 8883, 127.0.0.1:8883, ::1:8883
listener.ssl.external = 8883

说明:配置名称为 external 的 SSL 监听器。

listener.ssl.external.acceptors

## Value: Number
listener.ssl.external.acceptors = 16

说明:监听器的接收池大小。

listener.ssl.external.max_connections

## Value: Number
listener.ssl.external.max_connections = 102400

说明:监听器允许的最大并发连接数量。

listener.ssl.external.max_conn_rate

## Value: Number
listener.ssl.external.max_conn_rate = 500

说明:监听器允许的最大接入速率。单位:个/秒。

listener.ssl.external.active_n

## Value: Number
listener.ssl.external.active_n = 100

说明:监听器持续接收 TCP 报文的次数。

listener.ssl.external.zone

## Value: String
listener.ssl.external.zone = external

说明:监听器所属的配置组 (Zone)。

listener.ssl.external.access.1

## Value: ACL Rule
listener.ssl.external.access.1 = allow all

说明:监听器的 ACL 规则列表。它用于设置连接层的白/黑名单。

例如:

allow all:表允许所有的 TCP 连接接入。 allow 192.168.0.0/24:表允许网络地址为 192.168.0.0/24 的 TCP 连接接入。

同时,该配置可配置多条规则:

listener.ssl.external.access.1 = deny 192.168.0.1
listener.ssl.external.access.2 = allow all

listener.ssl.external.proxy_protocol

## Value: on | off
## listener.ssl.external.proxy_protocol = on

说明:监听器是否开启 Proxy Protocol 的支持。

如果 EMQX 集群部署在 HAProxy 或 Nginx 后,且需要拿到客户端真实的源 IP 地址与端口,则需打开此配置。

Proxy Protcol 参考: https://www.haproxy.com/blog/haproxy/proxy-protocol

listener.ssl.external.proxy_protocol_timeout

## Value: Duration
## listener.ssl.external.proxy_protocol_timeout = 3s

说明:设置 Proxy Protocol 解析的超时时间。如果该时间内没收到 Proxy Protocol 的报文,EMQX 会关闭其连接。

listener.ssl.external.tls_versions

## Value: String, seperated by ','
## NOTE: Do not use tlsv1.3 if emqx is running on OTP-22 or earlier
## listener.ssl.external.tls_versions = tlsv1.3,tlsv1.2,tlsv1.1,tlsv1

说明:指定服务端支持的 SSL 的版本列表。详情请参见 http://erlang.org/doc/man/ssl.html

listener.ssl.external.handshake_timeout

## Value: Duration
listener.ssl.external.handshake_timeout = 15s

说明:指定 SSL 握手过程的超时时间。

listener.ssl.external.depth

## Value: Number
## listener.ssl.external.depth = 10

说明:证书链中非自签发的中间证书的最大数量。如果该值为 0 则表示,对端证书必须是根 CA 直接授信的。

listener.ssl.external.key_password

## Value: String
## listener.ssl.external.key_password = yourpass

说明:证书密钥文件的密码。如果你的证书密钥设置了密码,则需要配置该选项。

listener.ssl.external.keyfile

## Value: File
listener.ssl.external.keyfile = etc/certs/key.pem

说明:指定 SSL 的私钥文件 (PEM)。

listener.ssl.external.certfile

## Value: File
listener.ssl.external.certfile = etc/certs/cert.pem

说明:指定 SSL 的证书文件 (PEM)。

listener.ssl.external.cacertfile

## Value: File
## listener.ssl.external.cacertfile = etc/certs/cacert.pem

说明:指定 SSL 的 CA 证书文件 (PEM)。该文件应包含发布服务器证书的所有中间CA证书以及根证书。 该文件还应包含所有受信CA的证书用以用于验证客户端的证书。

listener.ssl.external.dhfile

## Value: File
## listener.ssl.external.dhfile = etc/certs/dh-params.pem

说明:若使用 Ephemeral Diffie-Helman 算法,指定算法使用的 key 文件。

listener.ssl.external.verify

## Value: verify_peer | verify_none
## listener.ssl.external.verify = verify_peer

说明:指定握手过程中是否校验客户端。

listener.ssl.external.fail_if_no_peer_cert

## Value: true | false
## listener.ssl.external.fail_if_no_peer_cert = true

说明:SSL 握手过程中若客户端没有证书,是否让握手失败。

listener.ssl.external.ciphers

## Value: Ciphers
listener.ssl.external.ciphers = TLS_AES_256_GCM_SHA384,TLS_AES_128_GCM_SHA256,TLS_CHACHA20_POLY1305_SHA256,TLS_AES_128_CCM_SHA256,TLS_AES_128_CCM_8_SHA256,ECDHE-ECDSA-AES256-GCM-SHA384,ECDHE-RSA-AES256-GCM-SHA384,ECDHE-ECDSA-AES256-SHA384,ECDHE-RSA-AES256-SHA384,ECDHE-ECDSA-DES-CBC3-SHA,ECDH-ECDSA-AES256-GCM-SHA384,ECDH-RSA-AES256-GCM-SHA384,ECDH-ECDSA-AES256-SHA384,ECDH-RSA-AES256-SHA384,DHE-DSS-AES256-GCM-SHA384,DHE-DSS-AES256-SHA256,AES256-GCM-SHA384,AES256-SHA256,ECDHE-ECDSA-AES128-GCM-SHA256,ECDHE-RSA-AES128-GCM-SHA256,ECDHE-ECDSA-AES128-SHA256,ECDHE-RSA-AES128-SHA256,ECDH-ECDSA-AES128-GCM-SHA256,ECDH-RSA-AES128-GCM-SHA256,ECDH-ECDSA-AES128-SHA256,ECDH-RSA-AES128-SHA256,DHE-DSS-AES128-GCM-SHA256,DHE-DSS-AES128-SHA256,AES128-GCM-SHA256,AES128-SHA256,ECDHE-ECDSA-AES256-SHA,ECDHE-RSA-AES256-SHA,DHE-DSS-AES256-SHA,ECDH-ECDSA-AES256-SHA,ECDH-RSA-AES256-SHA,AES256-SHA,ECDHE-ECDSA-AES128-SHA,ECDHE-RSA-AES128-SHA,DHE-DSS-AES128-SHA,ECDH-ECDSA-AES128-SHA,ECDH-RSA-AES128-SHA,AES128-SHA

说明:指定服务端支持的密码套件。

listener.wss.external.psk_ciphers

## listener.wss.external.psk_ciphers = PSK-AES128-CBC-SHA,PSK-AES256-CBC-SHA,PSK-3DES-EDE-CBC-SHA,PSK-RC4-SHA

说明:若使用 PSK 算法,指定服务端支持的 PSK Cipher 列表。注意 'listener.ssl.external.ciphers' 和 'listener.ssl.external.psk_ciphers' 只能配置一个。

listener.wss.external.secure_renegotiate

## Value: on | off
## listener.wss.external.secure_renegotiate = off

说明:指定在客户端不遵循 RFC 5746 的情况下,是否拒绝 renegotiation 请求。

listener.wss.external.reuse_sessions

## Value: on | off
## listener.wss.external.reuse_sessions = on

说明:指定是否支持 SSL session 重用。详情见 http://erlang.org/doc/man/ssl.html

listener.wss.external.honor_cipher_order

## Value: on | off
## listener.wss.external.honor_cipher_order = on

说明:指定是否使用服务端的偏好设置选择 Ciphers。

listener.wss.external.peer_cert_as_username

## Value: cn | dn | crt | pem | md5
## listener.wss.external.peer_cert_as_username = cn

说明:使用客户端证书来覆盖 Username 字段的值。其可选值为:

  • cn:客户端证书的 Common Name 字段值

  • dn:客户端证书的 Subject Name 字段值

  • crt:DER 格式编码的客户端证书二进制

  • pem:基于 DER 格式上的 base64 编码后的字符串

  • md5:DER 格式证书的 MD5 哈希值

注意 listener.ssl.external.verify 应当设置为 verify_peer

listener.wss.external.peer_cert_as_clientid

## Value: cn | dn | crt | pem | md5
## listener.wss.external.peer_cert_as_clientid = cn

说明:使用客户端证书来覆盖 ClientID 字段的值。其可选值的含义同上。

注意 listener.ssl.external.verify 应当设置为 verify_peer

listener.wss.external.backlog

## Value: Number >= 0
listener.wss.external.backlog = 1024

说明:TCP 连接队列的最大长度。它表明了系统中允许的正在三次握手的 TCP 连接队列最大个数。

listener.wss.external.send_timeout

## Value: Duration
listener.wss.external.send_timeout = 15s

说明:TCP 报文发送超时时间。

listener.wss.external.send_timeout_close

## Value: on | off
listener.wss.external.send_timeout_close = on

说明:TCP 报文发送超时后,是否关闭该连接。

listener.wss.external.recbuf

## Value: Bytes
## listener.wss.external.recbuf = 4KB

说明:TCP 接收缓存区大小(操作系统内核级参数)。

listener.wss.external.sndbuf

## Value: Bytes
## listener.wss.external.sndbuf = 4KB

说明:TCP 发送缓存区大小(操作系统内核级参数)。

listener.wss.external.buffer

## Value: Bytes
## listener.wss.external.buffer = 4KB

说明:TCP 缓冲区大小 (用户级)。

该值建议大于等于 sndbuffrecbuff 的最大值,以避免一些性能问题。在不配置的情况下,它默认等于 sndbuff 和 recbuff 的最大值。

参见:http://erlang.org/doc/man/inet.html

listener.wss.external.nodelay

## Value: true | false
## listener.wss.external.nodelay = true

说明:即 TCP_NODELAY 参数。开启该选项即表示禁用 Nagle 算法,小包将被立即发送。

listener.wss.external.compress

## Value: true | false
## listener.wss.external.compress = true

说明:是否压缩 WebSocket 消息。压缩的实现依赖 zlib (opens new window)

defalte_opts 下的配置项,都属于压缩相关的参数配置,如无必要请不需要修改它。

listener.wss.external.deflate_opts.level

## Value: none | default | best_compression | best_speed
## listener.wss.external.deflate_opts.level = default

说明:压缩等级。

listener.wss.external.deflate_opts.mem_level

## Valid range is 1-9
## listener.wss.external.deflate_opts.mem_level = 8

说明:压缩参数。内存使用限制等级,配置可开辟多少内存来参与压缩过程。

1:最少的内存,但会降低压缩率。 9:最多的内存,会提高计算速度和压缩率。

不配置,则默认为 8

listener.wss.external.deflate_opts.strategy

## Value: default | filtered | huffman_only | rle
## listener.wss.external.deflate_opts.strategy = default

说明:压缩策略,用于调优压缩率:

  • default:针对普通数据。

  • filtered:由过滤器或预测器产生的数据,适用于分布随机性强的内容。

  • huffman_only:强制使用 Huffman 算法。优于 filtered

  • rle:将匹配距离限制为 1 (Run-Lenght Encoding),比 huffman_only 要快,但主要用于 PNG 图片。

这些策略仅影响压缩率,不会对正确性带来任何影响。

listener.wss.external.deflate_opts.server_context_takeover

## Value: takeover | no_takeover
## listener.wss.external.deflate_opts.server_context_takeover = takeover

说明:是否允许服务端的压缩上下文在帧之间传递。

listener.wss.external.deflate_opts.client_context_takeover

## Value: takeover | no_takeover
## listener.wss.external.deflate_opts.client_context_takeover = takeover

说明:是否允许客户端的压缩上下文在帧之间传递。

listener.wss.external.deflate_opts.server_max_window_bits

## Valid range is 8-15
## listener.wss.external.deflate_opts.server_max_window_bits = 15

说明:服务端最大窗口值。设置一个较大的值会有更好的压缩率,但会额外的消耗内存。

listener.wss.external.deflate_opts.client_max_window_bits

## Valid range is 8-15
## listener.wss.external.deflate_opts.client_max_window_bits = 15

说明:客户端最大窗口值。设置一个较大的值会有更好的压缩率,但会额外的消耗内存。

listener.wss.external.idle_timeout

## Value: Duration
## listener.wss.external.idle_timeout = 60s

说明:TCP 连接建立后的发呆时间,如果这段时间内未收到任何报文,则会关闭该连接。

listener.wss.external.max_frame_size

## Value: Number
## listener.wss.external.max_frame_size = 0

说明:允许的单个 MQTT 报文长度的最大值。

listener.wss.external.mqtt_piggyback

## Value: single | multiple
listener.wss.external.mqtt_piggyback = multiple

说明:WebSocket消息是否允许包含多个MQTT数据包

listener.wss.external.check_origin_enable

## Value: true | false (default false)
listener.wss.external.check_origin_enable = false

listener.wss.external.allow_origin_absence

## Value: true | false (default true)
listener.wss.external.allow_origin_absence = true

listener.wss.external.check_origins

## Value: http://url eg. https://localhost:8084, https://127.0.0.1:8084
listener.wss.external.check_origins = https://localhost:8084, https://127.0.0.1:8084


    您需要登录后才可以回复