![无法在 Ejabberd 服务器上上传文件](https://linux22.com/image/737571/%E6%97%A0%E6%B3%95%E5%9C%A8%20Ejabberd%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E4%B8%8A%E4%BC%A0%E6%96%87%E4%BB%B6.png)
我将尝试向您解释我的全新 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
模块的任何端口)上端点的处理程序。
这涉及两个步骤:
- 在配置的监听部分启用处理程序。
- 告知
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 中遇到文件上传困难的人。
资料来源: