検証環境用のアクセス制限をnginxで11行で設定する

  • 投稿日:
  • by
  • カテゴリ:

どんな状況での話か

  • 公開前や移行時の確認用のサーバーに、念のためパスワードを設定しておきたい
    • 厳密なアクセス制限は必要なく、「URLにアクセスしただけでは見られない」という程度の制限でよい
  • ウェブサーバーはnginxで、バックエンドのサーバーにプロキシしている
  • バックエンドのサーバーで、BASIC認証やDigest認証が使われている
    • つまり、nginxで単純にBASIC認証をかけてしまうと不都合がある

という稀によくありそうな状況で、既存の設定に影響をあたえること無く11行くらいで設定する方法についての話です。

注意事項

ユーザーが思った通りに認証情報を破棄できなかったりするので、本番運用でのアクセス制限として利用するものではありません。

設定前のファイル

な感じです。

設定後のファイル

11行(変数定義などで+4行)追加して以下のようになります。

流れとしては、

  1. サーバーでは、秘密のcookieが確認できない場合にはBASIC認証が必要とのレスポンスを返す
  2. ブラウザでは、BASIC認証が設定されているときのダイアログが表示される
  3. サーバーでは、正しいパスワードが送られてきた場合には秘密のcookieを設定する
  4. それ以降は、秘密のcookieが設定されていればBASIC認証の情報は必要なくアクセスできるようになる

となっています。

あえてBASIC認証のダイアログである必要はなく、セキュリティ的には期待される動作と異なるUIで好ましくはないのですが、403的なページを用意するよりもパスワードのダイアログを出してしまった方が楽だし説明も省けるので、一時的な制限ならこんなのもありではないかと思います。