web-dev-qa-db-ja.com

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

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

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

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

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

ありがとう。

13
NeDark

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

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

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

いいえ。returnだけがifコンテキストのlocation内で100%安全です。

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

7
quanta

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

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

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

21
Mike

はい、一時的にHTTP 503を使用することが重要です。リダイレクト。それは私がそれを解決した方法です:

server {
        listen      80;
        server_name joergfelser.at;
        root    /var/www/joergfelser.at/;

        location / {
            if (-f $document_root/maintenance.html) {
                return 503;
           }
            ... # rest of your config, it's important to have 
            ... # the maintenance case at the very top
         }

        error_page 503 @maintenance;
        location @maintenance {
                rewrite ^(.*)$ /maintenance.html break;
        }
}

また、そのトピックに関するブログ投稿も書いています。
https://www.joergfelser.at/redirecting-to-a-custom-nginx-maintenance-page/

ハッピーメンテナンス;)

0
jo3rg