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:1883
。 127.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 缓冲区大小 (用户级)。
该值建议大于等于 sndbuff
和 recbuff
的最大值,以避免一些性能问题。在不配置的情况下,它默认等于 sndbuff 和 recbuff 的最大值。
参见:http://erlang.org/doc/man/inet.html
listener.tcp.external.tune_buffer
## Value: on | off ## listener.tcp.external.tune_buffer = off
说明:如果打开此配置,请设置该值等于 sndbuff
与 recbuff
的最大值。
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:11883
。 127.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
说明:如果打开此配置,请设置该值等于 sndbuff
与 recbuff
的最大值。
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 缓冲区大小 (用户级)。
该值建议大于等于 sndbuff
和 recbuff
的最大值,以避免一些性能问题。在不配置的情况下,它默认等于 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