halo-dev / halo

强大易用的开源建站工具。
https://www.halo.run
GNU General Public License v3.0
34.02k stars 9.71k forks source link

上传附件或者主题报错,超过30秒 #3041

Closed kingname closed 1 year ago

kingname commented 1 year ago

是什么版本出现了此问题?

2.0.2

使用的什么数据库?

MariaDB

使用的哪种方式部署?

Docker

在线站点地址

No response

发生了什么?

image

无论是上传附件还是上传主题,都会报图中所示的错误。

相关日志输出

No response

附加信息

image
ruibaby commented 1 year ago

是否如提示一样等待了 30 s 呢?建议先看看浏览器控制台的异常。

可能和这个配置有关:https://uppy.io/docs/xhr-upload/#timeout-30-1000

/triage needs-information

kingname commented 1 year ago

来信已收到,我会尽快回复。

kingname commented 1 year ago

是否如提示一样等待了 30 s 呢?建议先看看浏览器控制台的异常。

可能和这个配置有关:https://uppy.io/docs/xhr-upload/#timeout-30-1000

/triage needs-information

是的,就是这个报错。请问我在哪里可以设置延长这个超时时间呢?

ruibaby commented 1 year ago

@kingname 先看浏览器控制台的异常和后端的日志才能排查,这并不一定是上传超时了。

kingname commented 1 year ago

@ruibaby 在控制台看了,就是[uppy]报的30秒超时

ruibaby commented 1 year ago

可以截下图,顺便看看 Network 是否有发起上传请求。

kingname commented 1 year ago
image image
ruibaby commented 1 year ago

上传附件会有这个问题吗?

kingname commented 1 year ago

不再使用halo,本issue关闭。

ruibaby commented 1 year ago

此问题目前还没有得到原因和复现,建议保持打开的状态,以便后续使用者继续反馈的跟踪。

感谢 @kingname 的反馈。

/reopen

f2c-ci-robot[bot] commented 1 year ago

@ruibaby: Reopened this issue.

In response to [this](https://github.com/halo-dev/halo/issues/3041#issuecomment-1368733628): >此问题目前还没有得到原因和复现,建议保持打开的状态,以便后续使用者继续反馈的跟踪,感谢 @kingname 的反馈。 > >/reopen Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md). If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository.
JohnNiang commented 1 year ago

我这边也未复现。复现步骤:通过 Good 3G 的网络限流上传 3.1MB 大小的主题,可参考以下截图:

image

kingname commented 1 year ago

我这里的环境是这样的:

  1. 在群晖上面通过Docker搭建Halo
  2. 在一台东京的云服务器上面,搭建frp,转发到群晖上
  3. 通过nginx创建反向代理到frp对应的端口
  4. cloudflare域名解析到云服务器的443端口
JohnNiang commented 1 year ago

我这里的环境是这样的:

1. 在群晖上面通过Docker搭建Halo

2. 在一台东京的云服务器上面,搭建frp,转发到群晖上

3. 通过nginx创建反向代理到frp对应的端口

4. cloudflare域名解析到云服务器的443端口

建议先通过群晖访问 Halo 安装主题或者插件,看看是否会出现同样的错误。如果没有出现该错误,确认一下反向代理配置是否正确。

我刚刚又在本地通过 Docker 运行测试,仍然没有遇到 30s 超时的问题,测试命令如下:

docker run \
  -it -d \
  --name halo \
  -p 8090:8090 \
  -v ~/.halo2:/root/.halo2 \
  halohub/halo:2.0.2 \
  --halo.external-url=http://localhost:8090/ \
  --halo.security.initializer.superadminuser=admin \
  --halo.security.initializer.superadminpassword=P@88w0rd

测试结果如下:

image

longjuan commented 1 year ago

https://github.com/halo-sigs/plugin-alioss/issues/13 这边也有个上传超时的issues,不过是在附件上传的时候的,uppy中的上传超时时间可以考虑是否应该调整


我也遇到过安装插件时发生超时错误 具体是在halo刚启动没多久的时候(cpu占用还比较高) 同时我这台测试服务器配置比较低,是azure香港1核1G

ruibaby commented 1 year ago

@longjuan 但 uppy 的文档说的是请求没有进度才会 timeout,所以怀疑还是因为请求还没有到达服务器,比如由于 Nginx 的大小限制。

我将研究一下如何触发 uppy 的这个异常。

kingname commented 1 year ago

直接在群晖上面使用IP访问的时候,可以正常上传。只有在用域名通过云服务器+nginx+frp转发的时候,才报错。

nginx已经设置过post请求体的大小和超时时间了。用域名访问的时候,除了上传文件,其他功能都是正常的。

longjuan commented 1 year ago

@ruibaby 可以使用https://github.com/longjuan/halo-plugin-s3os/actions/runs/3829474290 这里的jar包,我通过Thread.sleep模拟上传文件到对象存储过慢 image image

ruibaby commented 1 year ago

已经明白了导致这个问题的原因。是因为上传附件或者安装主题插件时,即便文件已经向服务器发送完毕,后端也会继续处理后续的逻辑,如果这个时间超过 uppy 组件设置的 timeout 时间,就会抛出异常(uppy 会检测是否有进度,请参考 https://github.com/transloadit/uppy/blob/83ac000c31bb8bcb806a22ef6a9e06f041e47d8a/packages/%40uppy/xhr-upload/src/index.js#L232-L259

文件发送到服务器完毕之后会是 100%,这里的 100% 并不代表是服务端已经处理完毕,而是文件发送完毕。

image

题主的情况应该是上传到服务器之后还要经过 frp,可能是这个阶段的时间造成了这个问题。

可以在 uppy 取消这个 timeout 设置。

@longjuan 提供的测试方式非常容易复现,感谢。

longjuan commented 1 year ago

/assign