自定义域(带子域)到S3端点的无服务器代理

时间:2017-06-22 15:15:23

标签: amazon-s3 proxy aws-lambda aws-api-gateway serverless-framework

我拥有什么

我有一个名为example-dev.com的S3存储桶,用于网络托管。

我的S3存储桶有几个名为client-site.combig-project.com的子文件夹。因此,在S3上,访问client-site.com的开发主页的网址为example-dev.com.s3-website-us-east-1.amazonaws.com/client-site.com/index.html。这会占用大约十几个网站,随着客户来去,网站列表会定期更改。

我想做什么

我尝试将原始S3网址映射到我的example-dev.com自定义域的子域。我想要:

client-site.com .example-dev.com /index.html

提供文件

example-dev.com.s3-website-us-east-1.amazonaws.com/ client-site.com /index.html

我会使用DNS作为映射,但每个站点都有一个子文件夹,文件夹会定期更改。

如果可能的话,我想使用无服务器架构来做这件事。我有一个版本的这个版本在节点服务器上使用http-proxy工作正常,但我想看看如果没有VPS就可以。我想我的意思是使用API​​网关和/或Lambda,但是我很难绕过API网关而且我不知道Lambda是否能够以相同的方式重新映射请求http -proxy确实。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

除非我遗漏了某些内容,否则您听起来并不需要API网关。

听起来您需要进入DNS并创建名为client-site.com.example-dev.com的CNAME条目,并直接指向S3存储桶。在这种情况下,您必须为每个子文件夹创建一个S3存储桶'。我不知道这是否可以改变。

但这可以通过DNS完成,而不是为了映射请求路径而支付任何类型的代理。

答案 1 :(得分:0)

一种解决方案是在主机ec2上安装nginx,并使用proxypass将请求代理到s3内容。这样您就可以使用友好的url client-site.com.example-dev.com继续访问内容。您的DNS记录现在必须指向主机ec2机器,它将使用nginx将请求路由到适当的后端s3内容,具体取决于访问的URL。

您还可以为不同的客户端提供多个侦听器

安装nginx

        for trip in myJsonArray
                            {
                                if let tripDict = trip as? NSDictionary{
                                    if let name = tripDict.value(forKey: "name"){
                                        self.tripNameArray.append(name as! String)
                                        if let name = tripDict.value(forKey: "image"){
                                           if let imgName = (name as? String){
                                              self.tripImageArray.append((imgName as? String)!)
                                           }
                                           else{
                                             // append default image 
                                         self.tripImageArray.append("default-img.jpg")
                                            }
                                     }
                                     else{
                                           // append default image 
                                           self.tripImageArray.append("default-img.jpg")
                                    }
                                    OperationQueue.main.addOperation ({
                                        self.tableView.reloadData()
                                    })
                                }
                            }

Nginx配置应包含:

yum nginx install