LoginSignup
0
4

More than 5 years have passed since last update.

nginx メンテナンスページを表示する

Posted at
  • 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を流用し、メンテナンスページを作成する
$ 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

参考

0
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
4