nginxのメンテナンスページ、ベストプラクティス


13

メンテナンスページが存在するときにサーバーを表示するように構成したい。私はこのコードを試してみました:

location / {
    try_files /maintenance.html $uri $uri/ @codeigniter;
}

しかし、ステータスコード200で配信されることに気付き、検索エンジンに混乱を引き起こす可能性があります。ベストプラクティスは503ステータスコードを返すことだと思います。グーグルでは、このようないくつかの関連ページを見つけます。ただし、リダイレクトを行うにはifを使用し、nginxのドキュメントによると、ifsを使用するのは安全ではありません。

ifを使用せずにそれを行う方法はありますか?この場合、使用しても安全ですか?

ありがとう。

回答:


7

ベストプラクティスは500ステータスコードを返すことだと思います。

500ではなく503を意味すると思います。

彼らifはリダイレクトを行うために使用し、nginxのドキュメントによれば、ifsを使用することは安全ではありません。

特許のみreturn100%安全な内部iflocationコンテキスト。

nginxのドキュメントによると、HTTPステータスコードをの最後の引数として指定できますtry_files。これを試しましたが、うまくいきませんでした。


21

これが私がやることです。

            if (-f $document_root/maintenance.html) {
                    return 503;
            }
            error_page 503 @maintenance;
            location @maintenance {
                    rewrite ^(.*)$ /maintenance.html break;
            }

ファイルがある場合、メンテナンスページが表示されます。ファイルを削除すると、通常の状態に戻ります。


1
ええ、それは質問のリンクにある同じコードです。私は実際にはifドキュメントに従って使用するべきではないので、この場合にs を使用しても安全かどうかを尋ねています
-NeDark

1
それと同じドキュメント:In some cases it's also possible to move ifs to server level (where it's safe as only other rewrite module directives are allowed within it).Mikeが示したメンテナンスerror_pageは通常、サーバー{}コンテキストで設定されます。
リーガン

1
ファイルの存在を確認せずに 'return 503'を行った以外は同じことをしました。そうすれば、シンボリックリンクしてメンテナンスページをオンにするだけで、サイトを有効化/無効化できます(Debianの "sites-available" / "sites-enabled"レイアウトを使用)。
Asfand Qazi

1
このような音はパフォーマンスに影響します。NGINXは、すべてのリクエストに対してファイルの存在を確認する必要があります...
Marc

1
マーク、よくアクセスされるファイルはメモリ内のファイルシステムキャッシュに保存されるため、そうではありません。
マイク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.