如何更改Amazon S3中对象的http响应代码

时间:2014-06-12 10:45:56

标签: amazon-s3 http-response-codes

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

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

HTTP/1.1 503 Service unavailable

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

有可能吗?

4 个答案:

答案 0 :(得分:2)

不确定支持此功能的浏览器或抓取工具。但您可以使用meta http-equiv status元标记来实现此目的。

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

规范要求对待它的方式与将503作为状态代码发送的方式相同。

答案 1 :(得分:1)

我相信你可以让Cloudfront这样做。我还没有测试过,但试试这个:

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:-1)

在Amazon允许来自S3的自定义状态代码之前,这是使用nginx的变通方法。

我们注意是否存在特定文件,它作为维护模式的“ON开关”。如果找到,我们向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;
    }
}