nginx:将密钥添加到 Google 云存储 url

nginx: add Key to Google Cloud storage url

1)
我有 nginx 运行 作为反向代理。我想为 Google 云存储添加一个密钥。你能在 nginx.conf 中做到这一点吗?然后 nginx 代理将作为客户端请求 Google Cloud Store?

2)
我用 go client 保存图像,它给了我一个 SelfLink 我保存在我的数据库中。但是SelfLink不同于Google developer Console中的link。我猜是因为账号登录。

Link 来自 Google 控制台(注意我使用了 {encoding} 而不是真正的编码):

https://{encoding}-apidata.googleusercontent.com/download/storage/v1_internal/b/test-test/o/imgres.jpg?qk={encoding}


自己Link

https://www.googleapis.com/storage/v1/b/test-test/o/imgres.jpg

我应该将哪种 og 密钥与 SelfLink 一起使用才能访问 Google Cloud Store。自我Link 只是给我:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "required",
    "message": "Login Required",
    "locationType": "header",
    "location": "Authorization"
   }
  ],
  "code": 401,
  "message": "Login Required"
 }
}

我应该如何使用这个(SelfLink) link 和什么键一起使用?

提前致谢

你不能直接用 nginx 代理它,因为 Google 需要使用服务证书对请求进行签名,但你可以将插件写入 nginx 或使用应用程序代理它。您可以在应用程序中使用 Google api 读取文件数据并将其写入响应 body。但是,由于用户会访问您的服务器,因此您将从 Google 和 return 获取文件并将其提供给用户,您将在您的服务器和 Google 上支付带宽,但它不会快得就像直接从 Google.

提供文件一样快

不过我有个好消息。

我从Googleapi得到的mediaLink是这样的:https://www.googleapis.com/download/storage/v1/b/bucket-name/o/test.png

您可以使用您的服务密钥签署 URL 以及到期日期,并与用户共享 URL。或者更好的是,您可以使用您的应用程序将用户重定向到已签名的 link,其中 Location header 以及 301 或 302 http 状态代码。所以用户会来到 http://example.org/downloads/test.png 并且它会传递到您的应用程序,您的应用程序将签署媒体 link 并重定向用户。

这里有详细的指导如何签署并与用户分享link:

https://cloud.google.com/storage/docs/access-control#Signing-Strings