2014-06-12 3 views
5

Ich habe eine Webseite auf Amazon S3 gehostet, aber ich möchte nicht, dass der HTTP-Antwortcode 200 sein. Die Seite ist eine Wartungsseite, auf die ich den Traffic umlenke, wenn ich unsere Hauptwebsite für Wartungszwecke herunterlade.Wie HTTP-Response-Code für ein Objekt in Amazon S3 ändern

möchte ich die Amazon S3 Seite eine Antwort-Header enthalten:

HTTP/1.1 503 Service unavailable 

Amazon die Möglichkeit geben, some metadata auf die S3-Objekt hinzufügen, aber es gibt nichts, für den HTTP-Statuscode.

Ist es möglich?

+0

Hallo Tom. Haben Sie eine Lösung dafür gefunden? – WooDzu

Antwort

-1

Bis Amazon erlauben einen benutzerdefinierten Statuscode von S3, ist hier eine Abhilfe mit nginx.

Wir achten auf das Vorhandensein einer bestimmten Datei, die als "ON-Schalter" für den Wartungsmodus fungiert. Wenn gefunden, wir proxy_pass Anfragen an S3 - Der Trick ist return 503 aber Redirect Verarbeitung von 503 Statuscodes zu einem Nginx "benannten Ort".

Beispiel nginx conf-Datei (nur die entsprechenden Bits dargestellt):

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; 
    } 
} 
+0

erstellt werden. Obwohl dies technisch eine Lösung für fehlende Funktionalität ist, ist es wirklich wert, $ 5 oder mehr für eine eingeschränkte Verfügbarkeit zu zahlen, um einen Statuscode für eine Website zu korrigieren das kostet weniger als $ 0.05/Monat für die gesamte Website? –

+0

Für uns ist es. Unsere Webseite kostet $ 15k pro Monat, um zu laufen, also nehmen wir uns die Zeit um sicherzustellen, dass wir eine Wartungswebsite haben, die in S3 mit dem korrekten Statuscode gehostet wird. – Tom

+0

Ich bin nicht anderer Meinung, dass es vorzuziehen ist, den richtigen Statuscode zu haben. Mein Punkt ist, der Fragetitel ist "Wie man http-Response-Code auf einem Objekt in Amazon S3 ändert"; Einrichten eines Hosts, um den Statuscode für ein S3-Website-Objekt zu beheben, ist ein astronomischer Preisanstieg im Vergleich zu den Kosten für das Hosting des Objekts auf S3. –

2

nicht sicher, welcher Browser oder Crawler, die das unterstützt. Aber Sie könnten möglicherweise das meta http-equiv status Meta-Tag verwenden, um dies zu erreichen.

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

Die Spezifikation besagt, dass es genauso behandelt wird, als wäre 503 als Statuscode gesendet worden.

0

Sie können den Statuscode für S3-Antworten nicht anpassen.

Sie können das API-Gateway als Proxy für die Fehlerseite Ihrer S3-Website verwenden, auf der Sie zurückgegebene Statuscodes anpassen können.