如何针对特定文件的除之外的所有内容启用HTTP Basic Auth?
以下是该位置的当前服务器块配置:
location / {
auth_basic "The password, you must enter.";
auth_basic_user_file /etc/nginx/htpasswd;
}
location /README {
auth_basic off;
}
但是,在/README
上,它仍然提示输入密码。
我们如何解决这个问题?
谢谢! 标记
答案 0 :(得分:34)
尝试使用sign =,这可以帮助您:
location = /README {
auth_basic off;
allow all; # Allow all to see content
}
答案 1 :(得分: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;
}
答案 2 :(得分:0)
我正在执行以下操作:
location = /hc.php {
auth_basic "off";
}
location / {
try_files $uri $uri/ =404;
}
location = /somefile.txt {}
首先出现,因此location / {}
可以捕获其余请求auth_basic "off"
要求在其周围加上引号这可能会以不同的顺序工作,并且/或者也没有双引号,但是为什么不尝试尽可能做到正确和完整的事情。
最重要的修饰符是:
(无)完全没有修饰符意味着该位置被解释为前缀。为了确定匹配项,现在将位置与URI的开头进行匹配。
= :如果位置需要与确切的请求URI匹配,则可以使用等号。匹配此修饰符后,搜索将在此处停止。
〜:Tilde表示此位置将被解释为区分大小写的RE匹配。
〜* :波浪号后跟一个星号修饰符,表示该位置将作为不区分大小写的RE匹配进行处理。
^〜:假设此区块是最佳的非RE匹配,则克拉后面加上波浪号修饰符意味着将不会进行RE匹配。
从这里引用:https://www.keycdn.com/support/nginx-location-directive
答案 3 :(得分:0)
只有auth_basic对我不起作用 如果我们必须在网址下跳过所有uri的身份验证
location ^~ /some/location/to_skip/ {
auth_basic off;
try_files $uri $uri/ /index.html;
}