假设我在RDBMS数据库中拥有10,000个用户名,该用户名将使用XMPP聊天服务,例如Ejabberd或MongooseIM,我将手动将其输入数据库中。现在,上述10,000个用户名中的每1000个用户名的JID用户名中都有固定前缀,例如:
1-1000个用户名以aa__开头(示例-aa10001,aa10002 ...)
1001-2000用户名以bb__开头(示例-bb10001,bb10002等)
2000-3000用户名以cc__开头(示例-cc10001,cc10002等)
以此类推...总共10个不同的前缀用户名
现在,我只希望这10个不同的对不能知道其他前缀用户名对,并且不能将任何类型的节(例如消息,状态,IQ)发送给其他对(具有不同的前缀)
可能性:
如果我可以在阻止策略中使用一些正则表达式,那将比阻止个人更好。
我知道您可能建议为每对使用不同的虚拟主机。但是管理如此多的虚拟主机可能很困难,因为在上面的示例中10K只是大局的一个小例子。
如果您不清楚您的问题,请告诉我?
答案 0 :(得分:1)
我只希望这10对不同的对不能知道其他前缀用户名对,并且不能将任何类型的节(例如消息,状态,IQ)发送给其他对(具有不同的前缀)
首先,使用mod_filter。查看其示例配置,也许您可以使用它来完成所需的工作: https://github.com/processone/ejabberd-contrib/tree/master/mod_filter
也许您可以基于用户名模式(“ aa *”或类似名称)定义ACL,这样您就可以将所有用户都放在一个虚拟主机中。
如果唯一的解决方案需要为每个用户组都拥有一个虚拟主机,则有些想法:
现在,在上述10,000个用户名中,每1000个用户名的JID用户名中都有固定前缀,例如:
正如您提到的,您可以在ejabberd中为每个用户组定义一个虚拟主机:10001@aa.example.com ...或为了不更改现有用户名:aa10001@aa.example.com ... >
也许我可以以某种易于管理的方式使用虚拟主机(频繁添加新对)而无需为每个虚拟主机添加新数据库,那么这将是最好的解决方案
如果您这样配置ejabberd并在创建数据库时使用适当的* .sql文件,则可以将所有虚拟主机放在一个数据库中。
new_sql_schema: true
是否可以在不停止服务器的情况下在配置中动态添加虚拟主机?
是的,它应该可以工作(这是最新功能)。根据需要编辑ejabberd.yml,然后重新加载:
$ ejabberdctl reload_config