「Apache で特定の URL のみ Basic 認証を外す方法」に関連して

を見て、env使ってBASIC認証バイパスしたりしてるなぁと思ったので晒してみます:

  <Location />
    Satisfy Any

    Order Deny,Allow
    Deny  from all
    Allow from env=trusted
    Allow from env=my_ktai

    AuthType Basic
    AuthName "HIMITSU"
    AuthUserFile /usr/irori/contents/example.com/htpasswd
    Require valid-user
  </Location>

envに値をセットするのはSetEnvIfを使っていかようにも。

SetEnvIf User-Agent  "^HIMITSU_Browser"         trusted=1
SetEnvIf Request_URI "^/api/"                   trusted=1

SetEnvIf X_CLIENT_TYPE "^(docomo|au|softbank)"           is_mobile
SetEnvIf x-up-subno    "XXXXXXXXXXXX_XX\.ezweb\.ne\.jp"  my_ktai
SetEnvIf is_mobile     "^$"                              !my_ktai

一方、Nginxでは…

allow
syntax: allow [ address | CIDR | all ]

Welcome to NGINX Wiki! | NGINX

allowで変数参照を使えないのでちょっと残念。

追記#1

CIDRベースのアクセス拒否/許可なら、geoとrewriteでできた。

http {
  ...
  geo $geo {
    default no;
    124.146.174.0/24 docomo;
    ...
    59.135.38.128/25 au;
    ...
    59.135.38.128/25 softbank;
    ...
    192.0.2.0/24     mycompany;
  }
  ...
  server {
    ...
    location / {
      if ($geo !~* '^(docomo|au|softbank|mycompany)$') {
        return 403;                                                             
      }

      proxy_pass ...
    }