如何为ejabberd配置SRV记录,实现通过example.com访问?
解决ejabberd跨域名连接问题的方案
核心问题原因
你遇到的“该服务器不负责此域名”错误,本质是ejabberd不知道需要处理example.com这个域名的XMPP请求。即使SRV记录把请求导向了server.example.com,客户端连接后会向服务器确认是否托管目标域名,只有当ejabberd的宿主域名列表里包含example.com时,才会正常响应。
具体解决步骤
必须将
example.com加入ejabberd的宿主域名列表
添加example.com到ejabberd.yml的hosts配置项中,比如:hosts: - "server.example.com" - "example.com"这不等同于创建新服务器,只是让同一台ejabberd服务器同时处理多个域名的XMPP业务,所有用户和资源都是共享的。
解决多域名证书问题
你不需要在example.com上运行服务器来申请证书,用Let's Encrypt的两种方式即可解决:- DNS-01挑战:通过在
example.com的DNS记录中添加一条TXT验证记录来完成证书申请,支持申请包含example.com和server.example.com的SAN(多域名)证书,无需任何HTTP服务。 - HTTP-01挑战:如果能控制
example.com的DNS解析,把它的HTTP请求(80端口)转发到server.example.com的80端口,Let's Encrypt的验证请求就能被正常处理,同样可以申请多域名证书。
拿到证书后,在ejabberd配置中指定该证书文件,就能同时覆盖两个域名的SSL需求。
- DNS-01挑战:通过在
验证配置
重启ejabberd服务后,用Conversations再次尝试连接example.com,此时服务器会正确响应域名托管请求,同时证书验证也能通过。
内容的提问来源于stack exchange,提问作者nanitook
相关产品推荐
相关产品推荐

