認証をnginx用にちょっと弄れる機能〜認証だってrewriteしたい〜

2026年01月14日 水曜日


【この記事を書いた人】
ヒラマツ

セキュリティ本部 セキュリティ情報統括室に所属 システム開発者。2000年問題で「2038年問題は定年で対応しなくていい!」とフラグを...。

「認証をnginx用にちょっと弄れる機能〜認証だってrewriteしたい〜」のイメージ

ngx_auth_mod開発者のヒラマツです。

今回、以前公開したnginx用認証モジュール群のngx_auth_modに、既存の認証をカスタマイズして組み合わせる機能を追加しました。
ngx_auth_modでBASIC認証をLDAPと連携させたら、アカウント管理から開放されて楽になりました。そこで、更なる便利さを求めて、カスタマイズ機能を追加しました。

ngx_auth_modは汎用的に作っているため、具体的な用途がイメージしにくいと思います。本記事のさいごに、具体的な用途の解説を用意しています。
工夫次第でいろいろな用途へ使える、面白い機能ですので紹介します。

ngx_auth_modをはじめて知る方へ

まず、ngx_auth_modをはじめて知った方向けに簡単に紹介します。
nginx用のモジュールであるため、nginxの前提知識が必要な説明になるのはご容赦ください。

nginxはngx_http_auth_request_moduleの機能で、以下の図1のように独自の認証モジュールを呼び出せます。この機能をngx_auth_modは利用しています。

ngx_http_auth_request_moduleの認証モジュールの図

図1 ngx_http_auth_request_module認証モジュールの図

nginxへ独自モジュールを追加するには、通常、nginxのソースコードからのビルドが必要です。しかし、認証モジュールについては、上記の図1のように外部のモジュールが呼び出せるので、nginxの再ビルドなしで手軽に後から追加できて便利です。
つまり、図2のようなnginx認証モジュールの交換セットが、ngx_auth_modです。

ngx_auth_modの立ち位置の図

図2 ngx_auth_modの立ち位置

追加したモジュールの紹介

今回、このngx_auth_modに、認証をカスタマイズして組み合わせる機能として、3つのモジュールを追加しました。

新機能の利用時の構成図

図3 新機能の利用時の構成

追加したは以下のモジュールです。

  • ngx_rewrite_auth
  • ngx_rewrite_and_auth
  • ngx_rewrite_switch_auth

どれも、ngx_http_auth_request_moduleと認証モジュールの間に入って、認証をカスタマイズするものです。

モジュールの概要

この追加したモジュールの概要は以下の通りです。

モジュール名/概略 動作のイメージ
ngx_rewrite_auth


(1つの)認証モジュールからの認証情報を書き換えるモジュール
通常のBASIC認証ページも認証ソースとして利用できる。

ngx_rewrite_authの動作イメージ
ngx_rewrite_and_auth


複数の認証モジュールを組み合わせる認証モジュール
呼び出した全モジュールが成功したときだけ認証が成功します。

ngx_rewrite_and_authの動作イメージ
ngx_rewrite_switch_auth


認証モジュールを選んで呼び分けるモジュール
アカウント名への正規表現で認証モジュールを呼び分けます。

似たような3つのモジュールですが、以下のように認証モジュールの呼び出し方で選べます。

  • 1つだけ呼び出すならngx_rewrite_auth
  • 認証結果をANDしたいならngx_rewrite_and_auth
  • 呼び分けるならngx_rewrite_switch_auth

使い方と設定例の紹介

モジュールの概要を把握しても、具体的にどう利用するかイメージしにくいと思います。
実際、以下の図4のように多段な組み合わせが可能で、組み合わせ方だけでも膨大です。

関連モジュールが多段に組み合わさる構造

図4 関連モジュールが多段に組み合わさる構造

組み合わせも自由ですし、さらにその機能も汎用的なので、モジュールからは使い方の想像が難しいのです。
このような理由から、具体的な使い方の例とその設定方法を紹介します。

結果的に、nginxの設定も含めた内容になりますが、気楽に読んでください。細かなところは読み飛ばして雰囲気だけつかんで、必要になったらまた読んでいただければと思います。

使い方と設定例の紹介記事のリンク/概要 設定例の動作イメージ
メールアドレスでBASIC認証する〜ドメイン付きで認証したい〜
メールアドレスをアカウント名に変換して認証処理する方法についてです。
メールアドレスを認証に利用するイメージ
メールアドレスで認証を振り分ける〜複数組織の認証を組み合わせたい〜
メールアドレスのドメイン部分で認証処理を呼び分ける方法についてです。
メールアドレスで認証を振り分けるイメージ
アカウント名とメールアドレスの両方で認証したい〜利用者への説明をさぼりたい〜
複数のアカウント形式で認証する方法についてです。
アカウント名とメールアドレスの両方で認証するイメージ
隣のサイトへ認証を丸投げ〜認証を管理したくない〜
別サイトの認証処理部分を流用する方法についてです。
別サイトを認証に利用するイメージ
認証処理を集中管理する〜シングルサインオン(SSO)はしたくない〜
BASIC認証なのは変えずに、認証処理だけを1つのサーバに集約する方法についてです。
認証を管理サイトで集中管理するイメージ
認可モジュール(権限管理)だけ追加したい〜認証情報を管理したくない〜
既存の認証処理を利用しつつ、認可処理を追加する方法についてです。
認可モジュールを追加したイメージ
応用編: nginxで認証結果をキャッシュしたい〜認証処理の負荷を下げたい〜
認証結果をnginxでキャッシュする際の設定方法や確認方法についてです。
認証用のキャッシュを追加するイメージ

このように、工夫次第でいろいろな利用シーンに活用できます。参考になりそうな使い方と設定例を見て、認証のカスタマイズを試してみてください。

ngx_auth_modのLDAP認証などの認証モジュール

新しく追加した機能とは別に、ngx_auth_modにはLDAP認証用に使えるngx_ldap_authなどの他の認証モジュールも同梱されています。開発経緯なども以下の記事で紹介していますので、ご覧ください。

では、nginxの認証をカスタマイズして、良い認証ライフを送ってください。

ヒラマツ

2026年01月14日 水曜日

セキュリティ本部 セキュリティ情報統括室に所属 システム開発者。2000年問題で「2038年問題は定年で対応しなくていい!」とフラグを...。

Related
関連記事