EC2上ejabberd WebSocket出现host-unknown错误求助
问题分析与解决办法
1. 核心问题:主机名不匹配
你的ejabberd配置中hosts字段仅声明了mydomain.com,但WebSocket连接使用的是myejbdomain.com域名。当客户端通过wss://myejbdomain.com:5280/websocket发起连接时,XMPP流会携带myejbdomain.com作为主机标识,而ejabberd无法识别未在配置中注册的主机,直接返回host-unknown错误。
修复步骤:
修改ejabberd.yml中的hosts配置,添加myejbdomain.com:
hosts: - mydomain.com - myejbdomain.com # 新增该行
2. 配置WebSocket的CORS规则
当前配置仅为文件上传模块(mod_http_upload)设置了CORS头,但WebSocket端点需要单独处理跨域请求。需在listen段的HTTP监听配置中添加CORS响应头,允许来自mydomain.com的请求。
修复步骤:
为端口5280和5443的ejabberd_http模块添加custom_headers:
# 以端口5280为例,端口5443做相同修改 - port: 5280 ip: "::" module: ejabberd_http tls: true custom_headers: "Access-Control-Allow-Origin": "https://mydomain.com" "Access-Control-Allow-Methods": "GET,POST,OPTIONS,CONNECT" "Access-Control-Allow-Headers": "Content-Type,Authorization,X-Requested-With" "Access-Control-Allow-Credentials": "true" request_handlers: # 保留原有request_handlers配置不变
3. 验证SSL证书有效性
确保你的SSL证书包含myejbdomain.com作为主题备用名称(SAN),否则浏览器会因为域名不匹配拒绝WebSocket连接。可通过以下命令检查:
openssl x509 -in /etc/ejabberd/certs/your-cert.pem -text -noout | grep -A 1 "Subject Alternative Name"
4. 重启ejabberd服务
修改配置后,重启服务使更改生效:
ejabberdctl restart
内容的提问来源于stack exchange,提问作者Vikram
相关产品推荐
相关产品推荐

