2013-04-23 42 views
6

Mam prosty plik konfiguracyjny, który jest używany do serwera niestandardowej strony błędu 503 w czasie konserwacji. Odpowiedni fragment brzmi:Zwrot 503 dla żądania POST w 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; 
    } 
} 

Problemem jest Nginx domyśla się, że każdy wniosek postanawia w statycznym pliku i dowolnego POST, PUT i DELETE wnioski dostać 405 (metoda nie jest to dozwolone) odpowiedzi.

Pytanie brzmi: w jaki sposób mogę poinformować Nginx, że będzie obsługiwał moją stronę dla dowolnej metody HTTP?

+1

Czy znalazłeś rozwiązanie tego problemu? –

Odpowiedz

3

wpadłem na to dzisiaj. Wygląda na to, że problem jest spowodowany przez nginx (jak większość serwerów), który nie pozwala ci uzyskać statycznego pliku.

Rozwiązanie polega na przechwyceniu błędów 405 w bloku lokalizacji @ 503, służąc stronie konserwacji. Ponadto trzeba będzie włączyć @ recursiveerrorpages @, ponieważ jesteś pierwszy, celowo, rzucanie 503 błędu, a następnie użytkownik jest rzucanie 405 zamieszczając na swojej statycznego pliku:

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

Źródło: https://www.onehub.com/blog/2009/03/06/rails-maintenance-pages-done-right/

+0

kod statusu zwrócony do prośby o wpis w tym przypadku nadal będzie 405 w tym przypadku, prawda? –

+0

@MohamedHafez nope, powinien zwrócić 503. Jest to w pełni wyjaśnione w połączonym źródłowym artykule, ale z pamięci przekierowuje na stronę konserwacji, a następnie jawnie rzuca 503 – Jay

0

Może spróbuj zmuszając 405 żądań być rzeczywisty URI:

error_page 405 = $uri; 
+0

Nie jesteś pewien co masz na myśli. Rzeczywisty identyfikator URI to 405. Chcę 503. – cababunga

+0

Zobacz, czy działa strona błędu 405 = 503/50x.html; –

Powiązane problemy