6

メンテナンス時にサーバーのカスタム 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;
    }
}

問題は、すべてのリクエストが静的ファイルで解決され、すべての POST、PUT、および DELETE リクエストが 405 (メソッドは許可されていません) 応答を受け取ることを Nginx が判断することです。

問題は、HTTP メソッドに対してページを提供するように Nginx に指示するにはどうすればよいかということです。

4

2 に答える 2

8

私は今日これに遭遇しました。この問題は、nginx (ほとんどのサーバーと同様)POSTが静的ファイルにアクセスできないことが原因のようです。

解決策は、@503 ロケーション ブロックで 405 エラーをキャプチャし、メンテナンス ページを提供することです。さらに、@recursiveerrorpages@ を有効にする必要があります。これは、最初に意図的に 503 エラーをスローし、次にユーザーが静的ファイルに投稿して 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/

于 2015-04-23T07:09:59.160 に答える