托管静态网站时是否可以在不进行重定向的情况下路由流量?

时间:2017-12-21 21:59:41

标签: amazon-web-services

我想在网址build/1.coolfile.html上投放/1/coolfile文件。我找不到像这样“重写”网址的方法。我所看到的只是做http redirect的方法。

2 个答案:

答案 0 :(得分:0)

据我所知,AWS没有可以为您重写URL的服务。您需要部署负载均衡器(如Apache或nginx)才能执行此操作,如果您不想创建和管理基础结构,我认为您可以在Elastic Beanstalk上运行apache。

答案 1 :(得分:0)

正如迈克尔 - sqlbot可能暗示过你可以用cloudfront和lambda做到这一点。 Cloudfront很容易设置,但lambda让你设置然后不起作用,你留下零线索,不得不尝试几个小时的随机事情,直到它最终工作。玩得开心。

编辑 - 因为这是一次创伤性体验,所以我会很友好地回归。

  1. 设置指向S3存储桶的分发。如果您已经创建了S3存储桶,则建议您只需要一个分发版。转到路线53并将A记录指向您的分配。文档可能会说使用CNAME。我使用A是因为CNAME不适用于example.com和www.example.com
  2. 您不需要特殊的IAM帐户来创建lambda。只需在您的管理员帐户上执行此操作(安全人员就会哭)。
  3. 创建你的lambda。让它为你的lambda创建一个新角色。您需要在IAM中编辑该角色的策略(转到aws控制台并键入IAM)。我看起来像这样(注意我添加了s3:GetObject)

    {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "logs:CreateLogGroup",
                "s3:GetObject"
            ],
            "Resource": "*"
        }
    ]
    

    }

  4. 创建你的lambda并发布它。只需使用他们的开始代码即可。在右上方,它将打印出lambda的“uri”。它看起来像arn:aws:lambda:us-east-1:169014044482:function:RewriteURL:9
  5. 返回云端>你的发行版>行为> 为原始请求添加一个(它没有缓存并从桶请求)和一个用于查看者请求(缓存并从云端请求)。在文本框中使用上面的“uri”。
  6. 等待一年的时间让Cloudfront更新并转到您的网站。如果它有效,你将在cloudwatch的lambda>部分的cloudwatch中看到lambda的日志。 yourLambdaFunctionName
  7. 如果这不起作用,请告知您可以直接转到分发网址(看起来像这样d1tplmeznzg2c3.cloudfront.net)。如果您的dns中的某些内容不正确,这可能会有所帮助。这样你至少可以验证lambda是否正确连接并正常运行。
  8. 一旦你完成所有这些****,你就可以写一个看起来与此类似的lambda(除非他们自从我写这个以来就改变它了哈哈)。

    exports.handler =(event,context,callback)=> {     const request = event.Records [0] .cf.request;     request.uri =“/ images / favicon.png”;     callback(null,request); 抱歉,但stackoverflow不会格式化此代码。是的,每一行都缩进了4个空格,并且在它上面和下面都有换行符LOLLL !!!!

  9. 每次打开新标签页以访问其他服务时,请确保重新登录亚马逊控制台,并确保将其重定向到控制台,无论您使用的是哪个页面。不要问我如何让它进行重定向。我尝试的每个解决方案都不起作用,我已经尝试了很多。 ...如果你刚刚开始这个我会建议不要使用AWS,除非你愿意花费大量的时间。