如何修复:请求时间和当前时间之间的差异太大

时间:2018-04-03 07:05:28

标签: php laravel amazon-web-services amazon-s3 timezone

我从AWS收到此错误:

  

App \ Services \ Exceptions \异常抛出消息"出错   systemError中更新的facebook事件执行" PutObject"上   " n.jpg&#34 ;; AWS HTTP错误:客户端错误:PUT n.jpg导致403   禁止回应:              RequestTimeTooSkewed reque之间的区别(截断...)     RequestTimeTooSkewed(client):请求时间和当前时间之间的差异太大。 -       RequestTimeTooSkewed请求时间和当前时间之间的差异也是如此   large.20180403T075710Z2018-04-03T06:57:48Z900000"

它表示请求时间为:7:57 am,服务器时间为:6:57 am

但是我的本地机器时间是:9:57 am(不使用vagrant或任何服务器)。

我的AWS在俄亥俄州,时间是:2:57 am

如何修改此错误?

我正在建立一个php/Laravel 5.5项目。

5 个答案:

答案 0 :(得分:3)

  

它说请求时间是:上午7:57,服务器时间是:上午6:57。

服务器时间表示AWS服务器上的时间(S3)。

  

我的AWS在俄亥俄州,时间是:凌晨2:57。

这没关系。 AWS以协调世界时(UTC)运行。各个地区的服务器不知道时间是什么,它们在哪里。

请求时间表示编码到请求中的时间戳,在代码运行的任何地方生成 - 在这种情况下可能是您的桌面/笔记本电脑。它以UTC编码。

  

但是我当地的机器时间是:上午9:57(不使用流浪者或任何服务器)。

一般来说,计算机 - 操作系统 - 有两个相互作用的概念来回答“现在几点了”的问题。 -

  • 现在几点了?
  • 在向用户显示时间时我应该使用什么偏移量?偏移量是时区设置。

这两个都需要正确...否则,你的时钟可以同时进行:

  • 设置为错误的时间
  • 显示正确的时间

您的计算机认为其时钟设置为显示UTC + 2时区的正确本地时间...因此在签署请求时从显示的“本地”时间减去2小时(显示9:57) ,请求时间7:57)...但是如果上午9:57是您当地的时间,那么您在计算机上的时区设置是不正确的,因为您实际上是在UTC + 3,因为“服务器”(在亚马逊)时间显示为6:57。更正您的时区设置,然后将时钟调整一小时(如有必要)可以解决问题。

答案 1 :(得分:1)

您需要更新AWS服务器和本地计算机上的时间。最好的方法是运行ntpdate命令来同步时间。

命令:

sudo ntpdate -u in.pool.ntp.org

答案 2 :(得分:0)

对我来说,我在系统上打开了Day Light Saving并再次尝试,并且成功了。我关闭了日光节约时间,因为这使到这里的时间延迟了1个小时。

答案 3 :(得分:0)

我如何为我解决问题:

  1. 在运行 docker-daemon/docker 的主机上。安装ntp

    yum -y install ntp
    
  2. 添加 NTP 服务器

    ntpdate -u in.pool.ntp.org
    

当主机系统时间正确时(与 NTP 服务器同步后)容器将自动更正时间。

答案 4 :(得分:0)

在某些系统上,如果偏移量超过“恐慌阈值”(通常为 1000 秒),NTP 将不会设置本地时钟。如评论中所述,ntpdate 命令可能是处理此问题的最佳方法。或者可以手动设置本地时钟。但是如果你这样做,理想情况下你需要确保偏移量小于“步长阈值”,通常只有 0.128 秒或 0.125 秒。否则,通过时钟步进同步可能需要大约 900 秒(典型的“步进阈值”)。通常情况下,同步大约需要 240 秒,并且应该没有困难的步骤。或者您可以禁用此“安全”功能。当心“步进”(而不是缓慢地“约束”)时钟,尤其是倒退,可能会导致问题。