nginxでメンテナンス画面を出す(POSTも対応)
POSTも対応、とか言ってリダイレクトしているだけです
※nginx version: nginx/1.6.2
課題
503でカスタムメンテページを出す設定をしている。
そこにPOSTリクエストがくると405が返ってしまう。
405じゃなくてメンテページを表示したい。
調べたこと
error_page 405 =503 @maintenance;
ググるとこんな記述を見るけど、nginxはstaticなページをPOSTで返せないので対応できないんじゃないかと思った。
なのでGET以外でメンテナンスのルールに流れてきたら、TOPに飛ばしてページを出せば良くね?
という雑な対応。リクエストが無駄に増えてしまうが、もうこれで許してください。
動いているからいいじゃない
結果のコンフィグ(抜粋)
server { set $maintenance false; if ( -f ~/etc/nginx/maintenance ) { set $maintenance true; } if ($request_uri ~ ^/static/(.*)$) { set $maintenance false; } if ($maintenance = true) { return 503; } error_page 503 @maintenance; location @maintenance { # POSTで静的ファイル返せないのでリダイレクトする if ($request_method != GET) { return http://$host; } root /home/app; set $is_sphone false; if ($http_user_agent ~ (iPhone|iPod|Android)) { set $is_sphone true; } if ($is_sphone = true) { rewrite ^(.*)$ /static/maintenance_sp.html break; } rewrite ^(.*)$ /static/maintenance.html break; expires 0; } }