2013-04-23 9 views
6

Ich habe eine einfache Konfigurationsdatei, die verwendet wird, um benutzerdefinierte 503-Fehlerseite zum Zeitpunkt der Wartung Server. Der relevante Teil ist dies:Rückgabe 503 für POST-Anfrage in Nginx

server { 
    listen  80 default; 
    root  /usr/share/nginx/html; 
    server_name example.com; 

    location/{ 
     if (-f $document_root/503.json) { 
      return 503; 
     } 
    } 

    # error 503 redirect to 503.json 
    error_page 503 @maintenance; 
    location @maintenance { 
     rewrite ^(.*)$ /503.json break; 
    } 
} 

Das Problem ist Nginx herausfindet, dass jede Anforderung in einer statischen Datei löst und jede POST, PUT und DELETE-Anfragen erhalten 405 (Methode nicht erlaubt) -Antwort.

Die Frage ist also: Wie sage ich Nginx meine Seite für jede HTTP-Methode zu dienen?

+1

Haben Sie eine Lösung gefunden? –

Antwort

3

ich in diese heute lief. Es scheint, dass das Problem auf nginx zurückzuführen ist (wie die meisten Server), Sie POST zu einer statischen Datei nicht zu lassen.

Die Lösung ist 405 Fehler in Ihrem @ 503 Position Block zu erfassen, dient die Wartung Seite. Darüber hinaus werden Sie @ recursiveerrorpages ermöglichen, haben @, da Sie zum ersten Mal sind, absichtlich, ein 503 Fehler zu werfen, und dann wird der Benutzer ein 405 durch die Veröffentlichung auf Ihre statische Datei werfen:

recursive_error_pages on; 

if (-f $document_root/system/maintenance.html) { 
    return 503; 
} 

error_page 404 /404.html; 
error_page 500 502 504 /500.html; 
error_page 503 @503; 
location @503 { 

    error_page 405 = /system/maintenance.html; 

    # Serve static assets if found. 
    if (-f $request_filename) { 
    break; 
    } 

    rewrite ^(.*)$ /system/maintenance.html break; 
} 

Quelle: https://www.onehub.com/blog/2009/03/06/rails-maintenance-pages-done-right/

+0

Der Statuscode, der in diesem Fall an die Postanforderung zurückgegeben wird, ist in diesem Fall immer noch eine 405, richtig? –

+0

@MohamedHafez nein, es sollte eine 503 zurückgeben. Es wird vollständig im verknüpften Quellartikel erklärt, aber aus dem Speicher wird auf die Wartungsseite umgeleitet und dann explizit eine 503 geworfen – Jay

0

versuchen Vielleicht die 405 Anfragen zwingt die tatsächliche URI zu sein:

error_page 405 = $uri; 
+0

Nicht sicher, was du meinst. Tatsächliche URI ergibt 405. Ich möchte 503. – cababunga

+0

Siehe dies, wenn es funktioniert error_page 405 = 503 /50x.html; –