Prosody XMPP服务器使用prosody-filer上传文件返回404如何解决?
Prosody Filer HTTP上传404错误排查步骤
1. 配置项匹配校验
- 核对prosody主配置文件
prosody.cfg.lua或对应虚拟主机配置中mod_http_upload的参数:http_upload_external_base_url需填写完整的https://upload.你的域名/路径,注意末尾必须带斜杠,少斜杠会导致路径拼接错误返回404 - 核对prosody侧配置的
http_upload_external_secret和prosody-filer配置文件(默认路径/etc/prosody-filer/config.toml)中的secret完全一致,密钥不匹配会导致请求被拦截,部分场景下会返回404错误 - 检查prosody-filer配置中
upload_path参数指向的存储目录是否真实存在,执行mkdir -p 你的存储路径 && chown prosody:prosody 你的存储路径确保prosody运行用户拥有该目录的读写权限
2. 反向代理配置校验
- 确认upload子域名的反向代理规则是否将所有请求全量转发到prosody-filer的监听端口(默认5000),不要添加多余的路径前缀,例如不能配置为仅转发
/upload前缀的请求,需直接匹配根路径/全量转发 - 检查nginx/Caddy等反向代理服务的配置,是否存在后缀过滤、路径重写规则误删上传请求的路径参数,例如nginx的
rewrite规则书写错误会导致请求路径被截断 - 手动在prosody-filer的存储目录下放一个测试文件,执行
curl http://127.0.0.1:5000/测试文件名验证本地访问是否正常:如果本地访问正常但公网通过子域名访问报错,即可定位为反向代理配置问题
3. 服务运行状态校验
- 执行
systemctl status prosody检查prosody服务运行状态,查看日志是否有上传相关的报错信息 - 执行
systemctl status prosody-filer检查prosody-filer服务运行状态,执行ss -tulnp | grep 5000确认prosody-filer默认监听的5000端口处于正常监听状态 - 执行
journalctl -u prosody-filer -f实时查看prosody-filer运行日志,触发文件上传操作时观察日志中的请求路径是否和预期一致,是否存在权限报错、路径不存在报错
4. 特殊场景排查
- 如果配置了HTTPS,确认upload子域名的SSL证书未过期、证书域名和子域名完全匹配
- 检查VPS防火墙、云服务商安全组规则,是否开放了upload子域名对应的80/443端口公网访问权限
- 确认prosody对应虚拟主机的模块加载配置中,已经启用
mod_http_upload模块,没有被禁用
内容的提问来源于stack exchange,提问作者KSP Atlas
相关产品推荐
相关产品推荐

