- nginxでメンテナンスページを表示する実験をしてみました (参考サイトをDockerで試してみました)
- nginxの設定ファイルには触れずに、メンテナンスページの表示/非表示を切り替える
- 指定したIPはメンテナンスページを表示しない
- Dockerは別途インストールしてください
単純にnginxを立ち上げる
$ docker pull nginx:latest
$ docker run --rm --name nginx-mainte -p 80:80 nginx:latest
- ブラウザでアクセス
http://<hostname>
- Welcome to nginxページが表示される
indexページを変更する
- nginxのコンテナに乗り込む
$ docker exec -it nginx-mainte /bin/bash
- ドキュメントルートの確認
$ cat /etc/nginx/conf.d/default.conf
・・・
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
・・・
-
index.html
を変更-
vi
無かったので無理くり・・
-
sed -i -e 's/nginx\!/nginx\!\!/g' /usr/share/nginx/html/index.html
- ブラウザでアクセス
http://<hostname>
- nginx! ⇒ nginx!!
メンテナンスページの作成/確認
- ホスト側で
- Nginxコンテナの
index.html
を流用し、メンテナンスページを作成する
- Nginxコンテナの
$ docker cp nginx-mainte:/usr/share/nginx/html/index.html maintenance.html
$ vim maintenance.html
htmlを適宜編集(パーミッションも)
- nginxコンテナのドキュメントルートにメンテナンスページを送り込みつつ起動
ctrl + c でコンテナ停止
$ docker run --rm --name nginx-mainte -p 80:80 -v `pwd`/maintenance.html:/usr/share/nginx/html/maintenance.html nginx:latest
- ブラウザでアクセス
http://<hostname>/maintenance.html
- メンテナンスページが表示される
メンテナンスページの表示/非表示を切り替え設定
- ホスト側で
-
mainte.conf
を作る-
/etc/nginx/conf.d/default.conf
を流用した(コメントアウトされている部分は削除)
-
-
mainte.conf
geo $allow_ip_flag {
default 0;
x.x.x.x/24 1; # メンテナンス中もアクセス許可するIPを設定
}
server {
listen 80;
server_name localhost;
error_page 503 @maintenance;
error_page 500 502 504 /50x.html;
set $maintenance false;
if ( -e /var/www/nginx/maintenance.txt ) {
set $maintenance true;
}
if ( $allow_ip_flag ) {
set $maintenance false;
}
if ( $maintenance = true ) {
return 503;
}
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location @maintenance {
internal;
expires 0;
root /var/www/nginx;
rewrite ^(.*)$ /maintenance.html break;
}
location = /50x.html {
root /usr/share/nginx/html;
}
}
-
mainte.conf
をホスト側からnginxコンテナに送り込みつつ起動
ctrl + c でコンテナ停止
$ docker run --rm --name nginx-mainte -p 8080:80 -v `pwd`/maintenance.html:/var/www/nginx/maintenance.html -v `pwd`/mainte.conf:/etc/nginx/conf.d/default.conf nginx:latest
メンテナンスページ ON
- nginxのコンテナに乗り込んで
$ touch /var/www/nginx/maintenance.txt
- ブラウザでアクセス
http://<hostname>:8080
- 許可IP:Welcome to nginxページが表示される
- 非許可IP:メンテナンスページが表示される
メンテナンスページ OFF
- nginxのコンテナに乗り込んで
$ rm /var/www/nginx/maintenance.txt