【问题标题】:How to change http response code on an object in Amazon S3如何更改 Amazon S3 中对象的 http 响应代码
【发布时间】:2014-06-12 10:45:56
【问题描述】:

我在 Amazon S3 上托管了一个网页,但我不希望 http 响应代码为 200。该页面是一个维护页面,当我关闭我们的主网站进行维护时,我会将流量重定向到该页面。

我希望 Amazon S3 页面包含以下响应标头:

HTTP/1.1 503 Service unavailable

亚马逊提供了将some metadata 添加到 S3 对象的能力,但 http 状态代码没有任何内容。

有可能吗?

【问题讨论】:

  • 嗨,汤姆。您找到解决方案了吗?

标签: amazon-s3 http-response-codes


【解决方案1】:

不确定哪些浏览器或爬虫支持此功能。但是您可能会使用meta http-equiv status 元标记来完成此操作。

<meta http-equiv="status" content="503 Service Unavailable" />

规范说要像发送 503 作为状态码一样对待它。

【讨论】:

    【解决方案2】:

    我相信您可以让 Cloudfront 做到这一点。我还没有测试过,但试试这个:

    http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html

    【讨论】:

    • 实现自定义错误页面时,只能自定义状态码。目前,自定义错误页面只能针对少数预定义的状态码 >400
    【解决方案3】:

    您无法自定义 S3 响应的状态代码。

    您可以使用 API Gateway 作为 S3 网站错误页面的代理,您可以在其中自定义返回的状态代码。

    【讨论】:

    【解决方案4】:

    在亚马逊允许来自 S3 的自定义状态代码之前,这里是使用 nginx 的解决方法。

    我们观察是否存在特定文件,该文件充当维护模式的“开启开关”。如果找到,我们 proxy_pass 向 S3 请求 - 诀窍是 return 503 但将 503 状态代码的处理重定向到 nginx“命名位置”。

    示例 nginx 配置文件(仅显示相关位):

    server {
    
        ...
    
        # Redirect processing of 503 status codes to a nginx "named location".
        error_page 503 @maintenance;
    
        # "Maintenance Mode" is off by default - Use a nginx variable to track state.
        set $maintenance off;
    
        # Switch on "Maintenance Mode" if a certain file exists.
        if (-f /var/www/app/maintenanceON) {
            set $maintenance on;
        }
    
        if ($maintenance = on) {
            # For Maintenance mode Google recommend using status code: "503 Service unavailable".
            return 503;
        }
    
        ...
    
        location @maintenance {
            # Redirect the request to a static maintenance page hosted in Amazon S3.
            # Note: Use proxy_pass instead of rewrite so we keep the 503 code (otherwise nginx serves a 302 code)
            rewrite ^(.*)$ /index.html break;
            proxy_pass http://bucketname.s3-website-us-east-1.amazonaws.com;
        }
    }
    

    【讨论】:

    • 虽然这在技术上是一种功能缺失的解决方案,但是否真的值得为降低可用性支付 5 美元或更多来纠正整个网站每月花费不到 0.05 美元的网站状态代码?
    • 对我们来说是。我们的网站每月运行成本为 15,000 美元,因此花时间确保我们在 S3 中托管一个具有正确状态代码的维护网站是值得的。
    • 我不反对最好有正确的状态码。我的意思是,问题标题是“如何更改 Amazon S3 中对象上的 http 响应代码”;与在 S3 上托管对象的成本相比,设置一个主机来修复 S3 网站对象的状态代码是一个天文数字的价格增长。
    • 我很高兴你找到了一个可以接受的解决方案,但我有完全相同的问题,这不是我的答案。
    猜你喜欢
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 2016-05-29
    • 2017-04-22
    • 1970-01-01
    • 2011-06-15
    • 2017-06-02
    • 2012-09-12
    相关资源
    最近更新 更多