问题原因
此前云盘配置完毕后正常运行,没有修改过OSS或Cloudreve设置,现在仍能正常上传文件,但预览或下载时报错如下:
<Error>
<Code>AccessDenied</Code>
<Message>Request has expired.</Message>
<RequestId>65D45CC27FFDC2343279D103</RequestId>
<HostId>yourdomain.oss-cn-beijing.aliyuncs.com</HostId>
<Expires>2024-02-20T07:32:55.000Z</Expires>
<ServerTime>2024-02-20T08:03:14.000Z</ServerTime>
<EC>0002-00000069</EC>
<RecommendDoc>https://api.aliyun.com/troubleshoot?q=0002-00000069</RecommendDoc>
</Error>
通过报错信息及文档了解到错误为“URL签名已过期”,更确切为ServerTime
超过了Expires
时间,从代码中亦能看到ServerTime>2024-02-20T08:03:14
超过了Expires>2024-02-20T07:32:55
。
使用date
或date -R
查看服务器系统时间,对照标准时间,确有出入。
因此判断问题原因为——服务器系统时间错误
解决办法
若为宝塔面板,可在面板--软件商店
安装Linux工具箱,该工具箱具有配置DNS、Swap、时区、镜像源、hosts、系统密码、内存盘等功能。
安装完毕后,点击时区设置,设置时区并同步即可。
在后续的观察中,时间又会重新出现偏差现象,每隔数日便更加凸显。于是我们采用Chrony服务来作为解决方案,详情见文章:Linux时间偏差处理 | 启用Chrony时间同步服务 - 雾里 (woolio.cn)
[...]前情在OSS下载报错(Cloudreve阿里云OSS下载报错:Request has expired)的问题处理中,我们发现问题原因是服务器时间错误。我们利用宝塔面板的linux工具箱手动同步时间,但经过数天后时间仍出现偏差。于是,我们在宝塔计划任务中将“同步时间”设定为每天执行,该方式虽然能有效地使时间处于整体正确状态,但执行日志中显示每天都会产生数秒的偏差,没能从根源上解决问题。 问题处理考虑[...]
Linux时间偏差处理 | 启用Chrony时间同步服务 - 雾里 04-10