42348


Nginxで管理しているすべてのバーチャルホストにBasic認証を掛け、特定のサイトのみ認証フローをスキップさせたいと考えております。

当初HTTPブロックで上記を実現しようとしましたが、IfモジュールはHTTPブロックでは使用できませんでした(設定内容は後述)。各バーチャルホストのServerブロックに記述すれば、動作するとは思いますが、なるべく一カ所にまとめて記述することで見通しをよくし、一括で管理できればと考えております。

何か良い解決策があればご教授いただければ幸いです。

下記は、失敗時の設定サンプルです。(nginx.conf HTTPブロック内)

[code]

    # Basic認証除外リスト 
    map $http_host $skip_auth_host { 
      default false;
      sample-AAA.com true;
      sample-BBB.com true;
    } 
    # Basic認証 
    if ($skip_auth_host = true) { 
      auth_basic  "basic authentication"; 
      auth_basic_user_file pathto/htpasswd; 
    } 
    
[/code]


CC BY-SA 3.0
2018-03-12T06:58:08.663
42343
2018-03-12T11:19:58.863
26950
question
nginx
Nginxの条件判定とBasic認証について


これが適切な方法かはわかりませんが、map内で`auth_basic`の値を直接セットすることで`if`ディレクティブを用いずにそのような条件分岐が可能にはなるはずです。

[code]

    map $http_host $auth_basic_attr { 
      default false;
      sample-AAA.com "basic authentication";
      sample-BBB.com "basic authentication";
    }
    
    auth_basic  $auth_basic_attr; 
    auth_basic_user_file pathto/htpasswd; 
    
[/code]


CC BY-SA 3.0
2018-03-12T10:25:28.023
42348
2018-03-12T10:25:28.023
2376
42343
answer