auth_basic error nginx: [emerg] "auth_basic" directive is not allowed here in
Maxim Dounin
mdounin at mdounin.ru
Wed Oct 15 13:46:07 UTC 2014
Hello!
On Wed, Oct 15, 2014 at 08:51:43AM -0400, shambler81 wrote:
> правильно ли я поимю чо нуно что-то вроде ?
>
> set $true1
> if ($http_host ~* "^(dev|www.dev)\..*\..{2,8}$"){
> auth_basic "Unauthorized";
> }
> set $true2
> if ($http_host ~* "^(dev|www.dev)\..*\..{2,8}$"){
> auth_basic_user_file /var/www/dev_htpasswd;
> }
>
> .....
> location / {
> ...
> $true1
> $true1
Нет.
Во-первых, как уже было сказано, в данном случае - правильным
решением будет сделать два отдельных блока server{}:
server {
server_name example.com;
# public site, no auth_basic here
...
}
server {
server_name dev.example.com www.dev.example.com;
auth_basic "Closed site";
auth_basic_user_file /path/to/htpasswd;
...
}
Во-вторых, переменные можно использовать в качестве параметра
директивы, а не вместо неё в конфиге. Т.е. в общем случае можно
требовать или не требовать аутентификацию как-то так:
set $realm "Closed site";
if (...auth required...) {
set $realm "off";
}
auth_basic $realm;
auth_basic_user_file /path/to/htpasswd;
--
Maxim Dounin
http://nginx.org/
Подробная информация о списке рассылки nginx-ru