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

ejabberd 21.07使用ejabberdctl注册用户提示unknown virtual host

问题根因排查与解决方案

第一步:验证运行中ejabberd实际加载的虚拟主机列表

不要直接依赖静态配置文件判断配置是否生效,先执行以下命令查看当前服务识别的合法虚拟主机:
ejabberdctl registered_vhosts
如果返回结果中没有100.100.100.100,说明配置未正确加载,按第二步排查;如果存在该地址,直接跳第三步。

第二步:配置未加载的排查方案

  • 检查yaml配置的缩进格式:ejabberd 21.07对yaml缩进要求极其严格,hosts和auth_method必须为同级配置,缩进完全一致,子项缩进为2个空格,不能使用制表符。你当前给出的配置片段中auth_method的缩进明显大于hosts,属于典型错误,修正后示例:
hosts:
  - "100.100.100.100"

auth_method:
  - sql
  - external
  • 确认修改的是生效配置文件:不同安装方式的ejabberd配置路径不同,可执行ps aux | grep ejabberd查看启动命令中--config参数指定的路径,确认你修改的是该路径下的配置文件。
  • 完全重启服务生效:21.07版本的虚拟主机配置无法通过热重载生效,修改配置后必须执行全量重启:systemctl restart ejabberd(systemd管理场景),重启后再次执行ejabberdctl registered_vhosts确认虚拟主机已加载。

提示:你当前的/etc/hosts配置无问题,虚拟主机匹配是字符串匹配,和域名解析无关,无需调整hosts配置。

第三步:虚拟主机已加载仍报错的排查方案

该问题由双认证配置触发,你当前设置的先sql后external的认证顺序会导致注册请求先被发往SQL模块,再发往外部认证脚本:

  • 临时将auth_method改为仅internal,尝试注册,如果注册成功,说明问题出在认证模块:
    • 调整认证顺序,将external放到sql之前测试
    • 检查外部认证脚本的逻辑,确认脚本可以正常处理host参数为100.100.100.100的请求,没有错误返回导致ejabberd误判虚拟主机不存在。

内容的提问来源于stack exchange,提问作者Victoria

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:54:02