如何在 ejabberd 中设置 mod_http_upload

Posted

技术标签:

【中文标题】如何在 ejabberd 中设置 mod_http_upload【英文标题】:How do setup mod_http_upload in ejabberd 【发布时间】:2020-03-07 14:17:50 【问题描述】:

在 ejabberd 18.01-2 中,使用 apt 安装在 lxc 容器 Ubuntu 18.04 Bionic LTS 中,我正在尝试设置 mod_http_upload

listen部分,我有

listen:
  -
    port: 5444
    module: ejabberd_http
    tls: true
    request_handlers:
      "/upload": mod_http_upload

在配置文件中,注释的端口是5444,但是在当前文档中,它是5443,所以我不确定哪个是正确的。

在模块部分,我有

modules:
  mod_http_upload:             
    host: "upload.ejabberd.forumanalogue.fr"
    max_size: infinity                                       
    thumbnail: true              
    put_url: "https://ejabberd.forumanalogue.fr:5444/upload"
    docroot: "/ejabberd/upload"

当我启动服务时,我可以在日志中看到一条奇怪的消息

2019-11-11 21:02:35.287 [warning] <0.367.0>@ejabberd_pkix:handle_call:255 No certificate found matching 'upload.ejabberd.forumanalogue.fr': strictly configured clients or servers will reject connections with this host; obtain a certificate for this (sub)domain from any trusted CA such as Let's Encrypt (www.letsencrypt.org)

这很奇怪,因为我有一个签名的通配符证书。

certfiles:                                                               
  - "/etc/letsencrypt/live/forumanalogue.fr/*.pem"

我可以通过我的客户 (Gajim) 看到该服务,但是当我尝试将文件发送到另一个本地帐户时,我收到错误 Access denied by service policy,请参阅完整日志:

<iq xml:lang='en' to='foo@forumanalogue.fr/gajim.HCLJ4BZI' from='upload.ejabberd.forumanalogue.fr' type='error' id='1dd35274-90e9-4b3b-9608-0fab59afe34e'>
<request xmlns='urn:xmpp:http:upload'>
<filename>a.out</filename>
<size>27232</size>
<content-type>application/octet-stream</content-type>
</request>
<error code='403' type='auth'>
<forbidden xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
<text xml:lang='en' xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'>Access denied by service policy</text>
</error>
</iq>

我必须启用调试日志才能看到一些东西。这很冗长,但我认为与客户端消息无关的相关部分是

2019-11-11 20:53:08.329 [debug] <0.501.0>@mod_http_upload:process_slot_request:544 Denying HTTP upload slot request from foo@forumanalogue.fr/gajim.HCLJ4BZI

感谢您的帮助。

【问题讨论】:

【参考方案1】:

我尝试使用 ejabberd 18.01,与您的配置类似,它对我有用。

查看源代码,“process_slot_request:544”错误意味着尝试使用上传功能的帐户在它发送到的虚拟主机中的“本地”访问规则不允许。可能是远程帐户。远程到该上传服务。换言之,upload.whatever 服务只能由 user12@whatever 等帐户使用。

在您的情况下,您正尝试使用帐户 foo@forumanalogue.fr 中的 upload.ejabberd.forumanalogue.fr,该帐户不是该上传服务的本地帐户。

几个想法,我希望其中一个适合您的具体设置:

A) 不要与虚拟主机混淆。如果是 forumanalogue.fr,请在任何地方保留它

B) 在主机和 put_url 选项中使用 @HOST@

C) 或者,如果您真的想弄乱主机,则添加访问权限,以便该虚拟主机中的帐户被视为上传服务的“本地”帐户。

【讨论】:

以上是关于如何在 ejabberd 中设置 mod_http_upload的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 的 XMPP 框架中设置资源

在 ejabberd 中找不到 crossdomain.xml [关闭]

ejabberd 集群:多主或主从

格式:“读取 /opt/ejabberd/.erlang.cookie 时出错:eacces”

使用 localhost ejabberd 设置 ichat 消息应用程序

如何在 Netbeans 中设置环境变量?