nginx:auth_basic用于除特定位置之外的所有内容

X__*_*X__ 21 nginx

如何为某个文件以外的所有内容启用HTTP Basic Auth ?

这是我当前的位置服务器块配置:

location / {
       auth_basic "The password, you must enter.";
       auth_basic_user_file /etc/nginx/htpasswd;
}

location /README {
       auth_basic off;
}
Run Code Online (Sandbox Code Playgroud)

但是,/README它仍然提示输入密码.

我们该如何解决这个问题?

谢谢!标记

Ser*_*kov 34

尝试使用sign =,这可以帮助您:

location = /README {
       auth_basic off;
       allow all; # Allow all to see content 
}
Run Code Online (Sandbox Code Playgroud)

  • 是'允许所有'真的有必要吗?这不是默认行为吗? (4认同)

小智 7

我正在做类似的事情使用"map"而不是"if"来分配auth_basic领域变量和htpasswd文件:

map $http_host $siteenv {
  default       dev;

  ~^(?<subdomain>.+)\.dev dev;
  ~^(?<subdomain>.+)\.devprofile devprofile;
  ~^(?<subdomain>.+)\.devdebug devdebug;
  ~^(?<subdomain>.+)\.test test;
  ~^(?<subdomain>.+)\.demo demo;
  ~^(?<subdomain>.+)\.stage stage;

  # Live
  ~^(?<subdomain>.+)\.live live;
  ~^.*\.(?P<subdomain>.+)\.[a-zA-Z]* live;
}

map $http_host $auth_type {
  default       "Restricted";

  ~^(?<subdomain>.+)\.dev "Development";
  ~^(?<subdomain>.+)\.devprofile "Development";
  ~^(?<subdomain>.+)\.devdebug "Development";
  ~^(?<subdomain>.+)\.test "Testing";
  ~^(?<subdomain>.+)\.stage "Stage";
  ~^(?<subdomain>.+)\.demo "Demo";

  # Live
  ~^(?<subdomain>.+)\.live "off";
  ~^.*\.(?P<subdomain>.+)\.[a-zA-Z]* "off";
}

server {
  .. etc ..

  auth_basic            $auth_type;
  auth_basic_user_file  /etc/nginx/conf.d/htpasswd-$siteenv;
}
Run Code Online (Sandbox Code Playgroud)