Help us understand the problem. What is going on with this article?

nginxで特定のURLを知っている人のみアクセスできるWebページをCookieを使って実現する

More than 1 year has passed since last update.

これはなに

Webの開発環境などパブリックにしたくないWebサイトを
特定の他者に公開したいときや、もしくは自分のモバイル端末などで確認したいときがあります。
そういう場合に、Cookieに秘匿情報を設定することで突破することができます。

ここで、リテラシーの問題やスマホブラウザなど機能的にCookieに値を設定するのが困難な場合があります。
そこで特定のURLのみ公開し、そのURLでCookieをセットします。

この設定が生きる場面

  • SPAなどでauthorizationヘッダを使っているためBasic認証が使えない
  • コワーキングスペースなど公共の場所からアクセスしたいのでIPアドレスでの制限が使えない
  • Cookieが容易に変更できないスマホブラウザなどに対応したい

設定部分

    location = /hogehogehoge {
       add_header Set-Cookie "secret=fugafugafuga";
       return 302 https://$host;
    }

    location / {
        set $interrupt true;

        if ( $cookie_secret = "fugafugafuga" ) {
            set $interrupt false;
        }

        # if ( $geo_office ) {
        #     set $interrupt false;
        # }

        if ( $interrupt = true ) {
            return 403;
        }

        proxy_pass                  http://backend;
    }

解説

location = /hogehogehogeが、秘匿情報をセットするURLになります。
適当な文字を設定しましょう。

cookie secretの値にfugafugafugaが入り、トップ画面にリダイレクトされます。

location /では、条件に基づいて$interrupt変数が変更され、
最終的に403を返すかどうかを判定します。

前述したcookiesecretの値で判断することや、geoを使ってIPアドレスで許可することもできます。

rmanzoku
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away