nginxでメンテモードを実装した。機能としては/tmp/503
ファイルがあったら、nginxがメンテナンス画面を出すというもの。
最初は503のstatusだったらメンテナンス画面をだすという実装だったけど、メンテナンス以外の時で503の場合は別のviewを出したかったので下記のようなconfigファイルにした。
server { listen 80; server_name _; error_page 503 @503_error; set $maintenance 0; if (-f "/tmp/503") { set $maintenance 1; } if ($maintenance = 1) { return 503; } location @503_error { root /etc/nginx/html; internal; expires 0; if ($maintenance = 1) { rewrite ^(.*)$ /maintenance/503.html break; } if ($maintenance != 1) { rewrite ^(.*)$ /503.html break; } } location / { ... }
ポイントとしては、
- 503のstatusの時はカスタムエラーページを出せるように
error_page 503 @503_error;
を設定すること location @503_error
の内部では
かなと。
最初 location /503.html
のような指定を使っていたけど、これだと上手くlocationに入らないケースがあって、そこは正直良く挙動の理解ができないです..
@でlocationの指定を行うようにしたら意図した挙動になりました。うーん違いがよくわらん