【问题标题】:Is this the correct way to serve web page from S3 bucket?这是从 S3 存储桶提供网页的正确方法吗?
【发布时间】:2017-02-21 18:17:51
【问题描述】:

我有一个节点服务器(EC2 服务器上的 Ubuntu),它为数据库中的数据提供服务。为了提供 html 页面,我使用了 S3 存储桶。我在我的代码中使用以下内容 -

https.get(
           'https://s3_Url_Of_Page', 
           function(proxyRes) {
                       proxyRes.pipe(res);
           }
);

我仍然不确定这是否会导致客户端直接从 S3 获取页面,或者首先将页面下载到我的 EC2 服务器然后将其提供给客户端,如果是这样我怎样才能让客户端获取页面当客户端在没有此中间下载的情况下访问我的服务器 url 时直接从 S3 获取。

【问题讨论】:

  • 您正在将页面下载到 EC2 服务器(这就是 http.get() 所做的)并将响应流式传输到客户端(这就是 proxyRes.pipe(res) 所做的。

标签: node.js amazon-web-services express amazon-s3 amazon-ec2


【解决方案1】:

通过管道传输响应,流量会通过您的 EC2 服务器。您应该向您的客户端发送重定向响应,其中 Location 指向您的 S3 内容。然后浏览器会直接从bucket中获取内容。

您需要为 S3 存储桶启用公共访问权限。

例子:

 var http = require('http');
 var server = http.createServer(function(req, res) {
     // http status 302 = temporary redirect; 301 = permanent redirect
     res.writeHead(302, {
         'Location': 'your/s3/bucket/path'
     });
     response.end();
 });

【讨论】:

  • 不会因此改变网址。你能提供代码让它工作吗?
  • 是的,浏览器中的 URL 将成为您的 S3 存储桶的 URL。我会在我的回答中举一个例子。
  • 但是先生,我的网站网址为mywebsite.com,当客户访问此网站时,我需要将 login.html 页面发送给客户,但网址应为mywebsite.com。此 login.html 文件位于 S3 上,以便稍后我可以使用云前端来加快加载速度。
  • 我明白了。如果您想使用 cloudfront,您应该查看 docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/… 以获取描述和示例。解决方案将包括 DNS 配置,而不是在您的代码中实现。
猜你喜欢
  • 1970-01-01
  • 2015-12-22
  • 1970-01-01
  • 1970-01-01
  • 2016-12-22
  • 1970-01-01
  • 2018-09-30
  • 2019-11-13
  • 2021-09-13
相关资源
最近更新 更多