2013-04-23 21 views
6

メンテナンス時にサーバーのカスタム503エラーページに使用される単純な構成ファイルがあります。関連する部分はこれです:NginxのPOSTリクエストで返信503

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

問題はnginxのあるすべての要求が静的ファイルで解決し、任意のPOST、PUTおよびDELETEリクエストは405(メソッド許可されていない)応答を得ることを割り出し。

質問:どのようにNginxにHTTPメソッドのページを提供するように指示するのですか?

+1

解決方法はありましたか? –

答えて

3

。問題は、nginx(ほとんどのサーバーのように)が静的ファイルにPOSTをさせないためです。

解決策は、@ 503ロケーションブロックで405エラーをキャプチャし、メンテナンスページ に対応することです。また、あなたが最初にしているので、 503エラーを投げて、意図的に、recursiveerrorpages @ @ を有効にする必要がありますし、ユーザーは自分の 静的ファイルに掲載することにより、405を投げている:

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

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

+0

この場合、投稿要求に返されたステータスコードは、この場合でも405になりますが、正しいですか? –

+0

@MohamedHafezいいえ、それは503を返します。リンク元の記事全体で説明されていますが、メモリからはメンテナンスページにリダイレクトされ、明示的に503 – Jay

0

たぶん、実際のURIする405個の要求を強制してみてください:私はこの今日に走った

​​
+0

あなたは何を意味するのかよく分かりません。実際のURIの結果は405になります。503が欲しいです。 – cababunga

+0

これが動作すればこれを見てください error_page 405 = 503 /50x.html; –

関連する問題