You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 06:42:50