HTTP Server 配置
EMQX Edge 内置 HTTP server,用于提供 Dashboard Web 界面和 HTTP API。以下配置控制该 server 如何暴露和保护,包括端口、连接限制、认证类型,以及可选的 HTTPS TLS 设置。
配置示例
以下示例将 Dashboard 配置为监听 8081 端口,最多接受 32 个并发连接,并要求 Basic 认证。默认管理员账号由 username 和 password 定义。其他账号存储在 usernames 和 passwords 数组中。详情请参见 Dashboard 用户管理。
http_server {
port = 8081
ip_addr = "0.0.0.0"
limit_conn = 32
username = "admin"
password = "<encrypted-password>"
auth_type = basic
usernames = ["user1"]
passwords = ["<encrypted-password>"]
max_body = 65535
ssl = {
enable = false
}
}配置项
| Parameter | Type | Default | Description |
|---|---|---|---|
port | Integer | 8081 | HTTP server 监听端口。取值范围:0 ~ 65535。 |
ip_addr | String | "0.0.0.0" | HTTP server 监听的 IP 地址。 |
limit_conn | Integer | 32 | Server 可处理的最大并发请求数。 |
auth_type | Enum | "basic" | HTTP server 认证类型。可选值:"basic"、"jwt"。 |
username | String | "admin" | 默认 Dashboard 登录账号的用户名。 |
password | String | - | 默认 Dashboard 登录账号的加密密码。 |
usernames | Array | - | 其他 Dashboard 账号的用户名。每一项对应 passwords 中相同索引位置的加密密码。通过 Dashboard UI 管理。 |
passwords | Array | - | 其他 Dashboard 账号的加密密码。每一项对应 usernames 中相同索引位置的用户名。通过 Dashboard UI 管理。 |
max_body | Integer | 65535 | HTTP 请求体最大大小,单位为字节。 |
jwt.public.keyfile | String | - | JWT 校验使用的公钥文件路径。当 auth_type 为 "jwt" 时必填。 |
为 Dashboard 启用 HTTPS
默认情况下,Dashboard 通过 HTTP 提供服务。如果 Dashboard 可通过不可信网络访问,启用 HTTPS 可以加密连接,防止凭据以明文传输。要启用 HTTPS,请设置 ssl.enable = true,并提供有效证书和密钥。
注意
Dashboard HTTPS 仅支持自托管部署。你必须提供自己的证书和密钥文件。
SSL 配置项
| Parameter | Type | Default | Description |
|---|---|---|---|
ssl.enable | Boolean | false | 为 Dashboard 启用 HTTPS。设置为 true 后,可通过 https:// 访问 Dashboard。 |
ssl.key_password | String | - | 私钥文件密码,仅当私钥受密码保护时需要。 |
ssl.keyfile | String | - | 服务端私钥文件路径。 |
ssl.certfile | String | - | 服务端证书文件路径。 |
ssl.cacertfile | String | - | 当 ssl.verify_peer 为 true 时,用于验证对端/客户端证书的 CA 证书或 CA bundle 路径。 |
ssl.verify_peer | Boolean | false | 是否要求并验证客户端证书。 |
ssl.fail_if_no_peer_cert | Boolean | false | 是否拒绝未提供证书的客户端连接。仅在 ssl.verify_peer 为 true 时生效。 |
准备自签名证书
以下示例生成用于测试的自签名证书。生产环境请使用 CA 签发的证书。
创建
san.cnf文件:ini[req] default_bits = 2048 prompt = no distinguished_name = dn req_extensions = req_ext x509_extensions = v3_ca [dn] CN = server [req_ext] subjectAltName = @alt_names [v3_ca] subjectAltName = @alt_names basicConstraints = CA:FALSE keyUsage = digitalSignature, keyEncipherment extendedKeyUsage = serverAuth [alt_names] DNS.1 = serverCN和DNS.1的值定义证书有效的主机名(server)。后续步骤会使用该主机名。生成证书和密钥:
bashopenssl req -x509 -nodes -days 825 \ -newkey rsa:2048 \ -keyout server.key \ -out server.crt \ -config san.cnf将
server.key和server.crt放到 EMQX Edge 可访问的目录,然后更新nanomq.conf:hoconhttp_server { port = 8081 ip_addr = "0.0.0.0" limit_conn = 32 auth_type = basic ssl = { enable = true keyfile = "/etc/certs/https/server.key" certfile = "/etc/certs/https/server.crt" cacertfile = "/etc/certs/https/server.crt" verify_peer = false fail_if_no_peer_cert = false } }在运行浏览器的机器上,将证书添加到受信任证书存储。
macOS:
bashsudo security add-trusted-cert -d -r trustRoot \ -k /Library/Keychains/System.keychain ./server.crtUbuntu/Debian:
bashsudo cp ./server.crt /usr/local/share/ca-certificates/ sudo update-ca-certificates
在其他操作系统上,请参考系统文档添加受信任根证书。
在运行浏览器的机器上,将 server 主机名添加到
/etc/hosts,并将<ip-address>替换为 EMQX Edge 主机的实际 IP 地址:text<ip-address> server重启 EMQX Edge,重新打开浏览器,然后访问
https://server:8081/。
验证 HTTPS 配置
要确认 Dashboard 已正确通过 HTTPS 提供服务,请运行以下命令。该命令会检查 server 是否完成 TLS 握手,并通过 ALPN 协商 http/1.1 应用协议。
curl -v --cacert server.crt https://server:8081 2>&1 | grep -i alpn输出应包含:
ALPN: server accepted http/1.1