課題(やりたいこと)
Nginxでメンテナンスモードで503を返すようにしたかった。Getリクエストであれば、503を返すことができるが、静的ページにPostリクエストすると405になってしまった(´; ω ;`)。これはNginxの仕様らしい...
実施方法
-
recursive_error_pages on
- nginxドキュメント
- error_pageを使用して複数回リダイレクトさせることを有効とする
- 503の処理の中で405を静的ページに指定して静的ファイルにリダイレクトさせる
recursive_error_pages on;
location @maintenance {
if (-f $request_filename) {
break;
}
error_page 405 = /maintenance.html;
rewrite ^(.*)$ /maintenance.html break;
}
- 検証で設定したconfファイルの全体
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name localhost;
error_page 503 @maintenance;
recursive_error_pages on;
if (-e /var/www/html/maintenance.html) {
set $maintenance true;
}
if ($maintenance = true) {
return 503;
}
location / {
try_files $uri $uri/ =404;
}
location @maintenance {
if (-f $request_filename) {
break;
}
error_page 405 = /maintenance.html;
rewrite ^(.*)$ /maintenance.html break;
}
}
実行結果 ( 対策前 )
$ curl -X POST localhost -d id=hoge
<html>
<head><title>405 Not Allowed</title></head>
<body bgcolor="white">
<center><h1>405 Not Allowed</h1></center>
<hr><center>nginx/1.14.0</center>
</body>
</html>
実行結果 ( 対策後 )
$ curl -X POST localhost -d id=hoge
<html>
<p> This is Maintenance Page </p>
</html>
関連
- Nginxでメンテナンスページの設定をする