一時的にサイトページを見せたくないときのお手軽な方法(Nginx、AWS)

こんにちは、エンジニアの小野寺です。

この記事ではサイトのメンテナンスなどで一時的にサイトを表示させたくないときのお手軽な方法をまとめました。 Nginx、AWSでサクッと対応できます。

Nginxでリダイレクト設定する

Nginxではnginx.confファイルにリダイレクトの記述をするだけでかんたんにサイトページを見せないようにできます。

例えばhttps://fuga.comのアクセスをすべてhttps://hoge.comにリダイレクトしたい場合はnginx.confに以下のように記述します。

rewrite ^/(.*) https://hoge.com/ redirect; 

この一文でhttps://fuga.comのアクセスはすべてhttps://hoge.comへリダイレクトします。とてもかんたんです。

※sudo nginx -s reloadで再起動を忘れずに。

せっかくなのでNginxで条件付きリダイレクトする方法も紹介したいと思います。

ディレクトリに応じたリダイレクト

もしかしたら一部のディレクトリはリダイレクトあり、他ディレクトリはリダイレクトなし、としたい場合があるかもしれません。そんな時は以下のように書きます。

if ($request_uri ~ ^/pages){
    rewrite ^/(.*) https://hoge.com/ redirect;
}

このように書けば、https://fuga.com/pages/https://hoge.com/にリダイレクトしますが、他のディレクトリはリダイレクトしません。

IPアドレスに応じたリダイレクト

もしかしたら特定のIPアドレスはリダイレクトあり、それ以外はリダイレクトなし、としたい場合があるかもしれません。そんな時は以下のように書きます。

if ($remote_addr =  xxx.xxx.xxx.xxx) {
   rewrite ^/(.*) https://hoge.com/ redirect;
}

xxx.xxx.xxx.xxxからhttps://fuga.comへのアクセスはhttps://hoge.com/にリダイレクトしますが、それ以外はリダイレクトしません。

このような感じで条件に応じた柔軟なリダイレクト設定も可能です。

ちなみにですが、Nginxは1つのif文に複数条件が設定できません。

if ($request_uri !~ ^/pages && $request_uri !~ ^/news){
    rewrite ^/(.*) https://hoge.com/ redirect;
}

みたいな書き方はできないので、複数条件を設定したい場合は1つずつif文を記述しましょう。

ALB(AWS)でリスナールールを使う

ALBを使っている場合はリスナールールで対応する方法があります。リスナールールには任意レスポンスを優先的にかえす設定ができます。

対象のALBを選択すると、リスナータブがあります。 リスナータブには登録済みのリスナールールが表示されているので、ルール項目のルールの表示/編集を押します。

ALBリスナー

条件を設定する項目が出てきます。 今回はHTMLページを表示するようにしました。

すべてのページを対象としたので、IF項目:*、THEN項目にレスポンスコード:503、Content-Type:text/html、レスポンス本文:表示したいHTMLを書いて保存します。 これでhttps://fuga.com/にアクセスすると、レスポンス本文に書いたHTMLが優先的に表示されるようになります。

ルールの設定

以上、サイトを一時的に見せたくないときのお手軽な方法でした。 サイトメンテナンスの際に活用してみてください。

弊社ではインフラからアプリケーション開発まで経験できます。リモートワークも用意しておりますのでぜひエンジニアさんのご応募をお待ちしています。