无法在 Ejabberd 服务器上上传文件

无法在 Ejabberd 服务器上上传文件

我将尝试向您解释我的全新 Ejabberd 服务器中发生了什么。我无法获得在用户之间上传文件的选项(mod_http_upload),我已遵循了几个教程,但没有任何办法。我使用端口 5443,因为它是默认配置,启用了 TLS,但它不起作用。我在 Android 手机和桌面上使用过客户端,结果相同。在服务器日志中,它显示它甚至创建了文件的“插槽”,但从未上传它们。我还检查了相关文件夹的访问权限,但它也不起作用。我开始有点绝望了,希望有人能帮助我,非常感谢!

答案1

我知道这是一个老问题,但我已经有一段时间一直在努力解决类似的问题。由于这是我在互联网上尝试寻找此问题的答案时找到的第一篇帖子之一,因此我将在这里解释如何在 ejabberd 上进行文件上传,以防有人遇到类似情况。

我假设你已经启动并运行了 ejabberd。下面是配置相关项我必须进行一些调整才能使文件上传正常工作。

首先是授权。该mod_http_upload模块有一个access选项。此选项与控制文件上传服务访问的访问规则相匹配。其默认值为local。这意味着您需要选择以下选项之一:

  • 创建一个名为的访问规则local并使用它授权您希望能够上传文件的任何人。
  • 或者更改配置中的访问选项mod_http_upload以指向您自己制定的规则。

就我而言,我选择了第二种方法。我创建了一条名为的新规则file_upload,并配置了mod_http_upload使用它。

acl:
  # ...
  local:
    server:
      - "example.com"
  # ...

access_rules:
  # ...
  file_upload:
    allow: local
  # ...

modules:
  # ...
  mod_http_upload:
    access: file_upload
    # ...

完成此操作后,您的本地用户将能够请求文件上传槽。但是,还有第二部分,即配置mod_http_upload/upload端口 5443(或您用于ejabberd_http模块的任何端口)上端点的处理程序。

这涉及两个步骤:

  1. 在配置的监听部分启用处理程序。
  2. 告知mod_http_upload您的端点。它在我的配置文件中如下所示:
listen:
  # ...
  -
    port: 5443
    ip: "::"
    module: ejabberd_http
    tls: true
    request_handlers:
      /upload: mod_http_upload
      # ...

modules:
  # ...
  mod_http_upload:
    put_url: "https://@HOST@:5443/upload"
    # ...

当然,您还需要确保 ejabberd 可以写入您的 docroot 文件夹。此外,如果您希望符合 XMPP 标准,您需要设置一些自定义标题

最后,我mod_http_upload对 ejabberd 24.02 版本的完整配置如下:

hosts:
  - "example.com"

log_rotate_size: 10485760
log_rotate_count: 5
loglevel: debug

acl:
  admin:
    user:
      - "[email protected]"
  local:
    server:
      - "example.com"
  loopback:
    ip:
      - 127.0.0.0/8
      - ::1/128
      - ::ffff:127.0.0.1/128

access_rules:
  configure:
    allow: admin
  c2s:
    deny: blocked
    allow: all
  pubsub_createnode:
    allow: local
  file_upload:
    allow: local

shaper_rules:
  max_user_offline_messages:
    - 5000: all
  hard_upload_quota:
    - 16: all
  soft_upload_quota:
    - 12: all

certfiles:
  - "/letsencrypt/live/example.com/fullchain.pem"
  - "/letsencrypt/live/example.com/privkey.pem"

listen:
  -
    port: 5222
    module: ejabberd_c2s
    access: c2s
    shaper: c2s_shaper
    starttls: true
    starttls_required: true
    max_stanza_size: 262144
  -
    port: 5223
    module: ejabberd_c2s
    access: c2s
    shaper: c2s_shaper
    tls: true
    max_stanza_size: 262144
  -
    port: 5269
    ip: "::"
    module: ejabberd_s2s_in
    shaper: s2s_shaper
    max_stanza_size: 524288
  -
    port: 5270
    ip: "::"
    module: ejabberd_s2s_in
    shaper: s2s_shaper
    tls: true
    max_stanza_size: 524288
  -
    port: 5443
    ip: "::"
    module: ejabberd_http
    tls: true
    request_handlers:
      /admin: ejabberd_web_admin
      /upload: mod_http_upload
  -
    port: 3478
    transport: udp
    module: ejabberd_stun
    use_turn: true
    turn_min_port: 49152
    turn_max_port: 65535
    turn_ipv4_address: # my public IP address
  -
    port: 5349
    transport: tcp
    module: ejabberd_stun
    use_turn: true
    tls: true
    turn_min_port: 49152
    turn_max_port: 65535
    ip: 0.0.0.0
    turn_ipv4_address: # my public IP address

modules:
  mod_avatar: {}
  mod_blocking: {}
  mod_caps: {}
  mod_carboncopy: {}
  mod_client_state: {}
  mod_disco:
    server_info:
      -
        modules: all
        name: abuse-addresses
        urls: ["mailto:[email protected]"]
  mod_fail2ban: {}
  mod_http_upload:
    access: file_upload
    put_url: "https://@HOST@:5443/upload"
    docroot: "/home/ejabberd/upload"
    custom_headers:
      "Access-Control-Allow-Origin": "https://@HOST@"
      "Access-Control-Allow-Methods": "GET,HEAD,PUT,OPTIONS"
      "Access-Control-Allow-Headers": "Content-Type"
  mod_http_upload_quota:
    max_days: 3
  mod_jidprep: {}
  mod_last: {}
  mod_mam:
    assume_mam_usage: true
    default: always
  mod_muc:
    default_room_options:
      allow_subscription: true
      anonymous: false
      mam: true
      members_only: true
      public: false
      public_list: false
    history_size: 0
  mod_muc_admin:
    subscribe_room_many_max_users: 100
  mod_muc_occupantid: {}
  mod_offline:
    store_groupchat: true
    use_mam_for_storage: true
  mod_ping: {}
  mod_pres_counter: {}
  mod_privacy: {}
  mod_private: {}
  mod_proxy65:
    access: local
    max_connections: 5
  mod_pubsub:
    access_createnode: pubsub_createnode
    plugins:
      - flat
      - pep
    force_node_config:
      ## Avoid buggy clients to make their bookmarks public
      storage:bookmarks:
        access_model: whitelist
  mod_push:
    include_body: true
    include_sender: true
  mod_roster:
    versioning: true
  mod_stream_mgmt: {}
  mod_stun_disco:
    credentials_lifetime: 12h
    services:
      -
        host: # my public IP address
        port: 3478
        type: stun
        transport: udp
        restricted: false
      -
        host: # my public IP address
        port: 3478
        type: turn
        transport: udp
        restricted: true
      -
        host: example.com
        port: 5349
        type: stuns
        transport: tcp
        restricted: false
      -
        host: example.com
        port: 5349
        type: turns
        transport: tcp
        restricted: true
  mod_time: {}
  mod_vcard: {}
  mod_vcard_xupdate: {}

acme:
  auto: false
s2s_use_starttls: required

我希望这可以帮助那些在 ejabberd 中遇到文件上传困难的人。

资料来源:

相关内容