16
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

nginxでメンテナンス中ページを出すだけのサーバを立てる方法

Posted at

AWSでプロダクション環境をメンテナンスするときに、一時的にメンテナンスページを表示する方法です。ここでは、ELBとEC2をつかったやりかたを紹介します。ここで紹介する方法の他にもRoute53とS3を組み合わせて、自動でDNSフェイルオーバーすることで、メンテナンスページを出す方法もありますが、「AWS ソーリーページ Route53 S3」などで検索するとたくさん情報があるので、サーバレスのソーリーページの実現方法はそちらに譲りたいと思います。

ここで紹介するEC2でメンテナンスページを出す方法としては、

  1. メンテナンスに入る前に、ELBからアプリケーションサーバを切り離し、
  2. それと同時に、ELBにソーリーサーバを繋ぐ

という手動運用で行われる計画停止を前提としています。

ソーリーサーバの構築

AWS公式のUbuntu AMIから適当に1台、EC2のインスタンスを起動します。つぎに、nginxをインストールします。

apt-get install nginx

ソーリーサーバのファイル構成

ファイル構成としては、必要最低限にするのがポイント。ファイルが見つからなかったら、503レスポンスを返すため。

/usr/share/nginx/html
├── ping.html ... ELBのヘルスチェック用ファイル。200レスポンスを返す必要がある
└── maintenance.html ... メンテナンス中のソーリーページ。どんなURLにアクセスしてもこのページを出すようにする

ソーリーサーバのnginxの設定

デフォルトのサイト設定 /etc/nginx/sites-enabled/default を3箇所書き換えます。

server {
	listen 80 default_server;
	listen [::]:80 default_server ipv6only=on;

	root /usr/share/nginx/html;
	index index.html index.htm;

	# Make site accessible from http://localhost/
	server_name localhost;

	location / {
		try_files $uri @maintenance; # ここ!
	}

	# ここ!
	location @maintenance {
		return 503;
	}

	# Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
	#location /RequestDenied {
	#	proxy_pass http://127.0.0.1:8080;
	#}

	# error_page 404 /404.html;

	# redirect server error pages to the static page /50x.html
	# ここ!
	error_page 503 /maintenance.html;
	location = /maintenance.html {
		root /usr/share/nginx/html;
	}

...以下はデフォルトのまま

以上でソーリーサーバの構築は完了です。

16
11
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
16
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?